【问题标题】:Is it possible to reshape data in R such that two rows are split under one new column?是否可以重塑 R 中的数据,以便将两行拆分为一个新列?
【发布时间】:2016-02-17 22:53:04
【问题描述】:

抱歉,如果这个问题有点神秘,我正在努力说出它,所以尽我所能。

我有一个包含一些基本任务信息的数据框(或数据表);

names<-c('Neil','Neil', 'Neil', 'Andrew')
task<-c("Task 1","Task 1", "Task 2", "Task 3")
date<-c("2016-01-01","2016-02-01", "2016-01-15", "2016-01-01")
duration<-c(7, 7, 7, 7)
count<-c(1,2,1,1)
testLong<-data.frame(names,task,date,duration,count,stringsAsFactors = FALSE)

这会返回

+------------------------------------------------+
|   names   |task   |date       |duration |count |
+------------------------------------------------+
| 1:   Neil |Task 1 |2016-01-01 |       7 |    1 |
| 2:   Neil |Task 1 |2016-02-01 |       7 |    2 |
| 3:   Neil |Task 2 |2016-01-15 |       7 |    1 |
| 4: Andrew |Task 3 |2016-01-01 |       7 |    1 |
+------------------------------------------------+

如果想重塑此数据,使计数列成为日期和持续时间字段上方的列标题,目标输出为;

+-------------------------------------------------------------+
|   names   |task   | 1                 |2                    |
+-------------------------------------------------------------+
| 1:   Neil |Task 1| 2016-01-01  |     7|2016-02-01  |      7 |
| 2:   Neil |Task 2| 2016-01-15  |     7|NA          |      NA|
| 3: Andrew |Task 3| 2016-01-01  |     7|NA          |      NA|
+-------------------------------------------------------------+

我已经尝试过 tidyr (spread) 和 dcast,但无法完全满足我的需求。

我正在考虑基于名称和任务创建一个日期和持续时间向量的一些复杂的子集化方法,然后我可以将其绑定回来,但希望有一种我根本找不到的更好方法。

非常感谢

【问题讨论】:

  • 这是一种常见的从长到宽的重塑。 R 不支持空列,所以你的确切格式在我的书中是不可能的。

标签: r


【解决方案1】:

reshape 救援:

reshape(testLong, idvar=c("names","task"), timevar="count", direction="wide")

#   names   task     date.1 duration.1     date.2 duration.2
#1   Neil Task 1 2016-01-01          7 2016-02-01          7
#3   Neil Task 2 2016-01-15          7       <NA>         NA
#4 Andrew Task 3 2016-01-01          7       <NA>         NA

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2020-05-22
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多