首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中将多个数据帧日期列组合成一个堆叠的日期列

如何在R中将多个数据帧日期列组合成一个堆叠的日期列
EN

Stack Overflow用户
提问于 2021-01-12 20:24:00
回答 1查看 202关注 0票数 0

我有以下数据框架,它记录了个人的姓名、他们的工作,以及他们在一天中工作了多少小时:

代码语言:javascript
运行
复制
test_df <- data.frame(Name = c("Mark", "Stacy", "Anthony", "Colette"),
                      Job = c("Bartender", "Bartender", "Host", "Server"),
                      "01-Jan" = c(4, 5, 0, 6),
                      "03-Jan" = c(3, 7, 7, 8),
                      "04-Jan" = c(8, 0, 5, 4),
                      "07-Jan" = c(5, 6, 6, 7),
                      "08-Jan" = c(6, 8, 4, 0))

上述数据帧只有一行对应于每个人的姓名,然后有一列对应于每一天,该列记录一个人在该特定一天工作的小时数。我想要切换这个,以便每个人的名字出现在5行(对应于数据帧中的5天),然后有“日期”列和“小时”列,显示一个人工作的时间和一天的一行。就像这样:

代码语言:javascript
运行
复制
test_df_2 <- data.frame(Name = c("Mark", "Mark", "Mark", "Mark", "Mark",
                               "Stacy", "Stacy", "Stacy", "Stacy", "Stacy",
                               "Anthony", "Anthony", "Anthony", "Anthony", "Anthony",
                               "Colette", "Colette", "Colette", "Colette", "Colette"),
                      Job = c("Bartender", "Bartender", "Bartender", "Bartender", "Bartender",
                              "Bartender", "Bartender", "Bartender", "Bartender", "Bartender",
                              "Host", "Host", "Host", "Host", "Host",
                              "Server", "Server", "Server", "Server", "Server"),
                      Date = c("01-01-2020", "01-03-2020", "01-04-2020", "01-07-2020", "01-08-2020",
                              "01-01-2020", "01-03-2020", "01-04-2020", "01-07-2020", "01-08-2020",
                              "01-01-2020", "01-03-2020", "01-04-2020", "01-07-2020", "01-08-2020",
                              "01-01-2020", "01-03-2020", "01-04-2020", "01-07-2020", "01-08-2020"),
                      Hours = c(4, 3, 8, 5, 6,
                               5, 7, 0, 6, 8,
                               0, 7, 5, 6, 4,
                               6, 8, 4, 7, 0))

我想在R中编写一个脚本,将第一个数据帧转换为第二个数据帧,但我不确定如何实现。我查看了关于将多个数据帧列组合为一个的其他堆栈溢出答案,但是我无法看到如何获得行填充正确次数的方法,以及相应的日期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 22:07:29

你可以用更长()

代码语言:javascript
运行
复制
library(tidyr)

pivot_longer(test_df, 3:7, names_to="Date", values_to="Hours")

这将创建您要寻找的输出结构。然后,您只需对Date列中的值进行重新编码。

另一个选项是使用重塑2::熔体()

代码语言:javascript
运行
复制
melt(test_df, id.vars=c("Name", "Job"), variable.name = "Date", value.name="Hours")

然而,tidyr/pivot_longer似乎是块上较新的孩子。

这篇文章很好地解释了工作中的概念。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65691530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档