【发布时间】:2015-09-16 12:10:42
【问题描述】:
我最近刚刚发布了question,询问如何将数据从长表重塑为宽表。然后我发现spread() 是一个非常方便的函数。所以现在我需要对我之前的帖子进行一些进一步的发展。
假设我们有一个这样的表:
id1 | id2 | info | action_time | action_comment |
1 | a | info1 | time1 | comment1 |
1 | a | info1 | time2 | comment2 |
1 | a | info1 | time3 | comment3 |
2 | b | info2 | time4 | comment4 |
2 | b | info2 | time5 | comment5 |
我想把它改成这样:
id1 | id2 | info |action_time 1|action_comment1 |action_time 2|action_comment2 |action_time 3|action_comment3 |
1 | a | info1 | time1 | comment1 | time2 | comment2 | time3 | comment3 |
2 | b | info2 | time4 | comment4 | time5 | comment5 | | |
所以这个问题和我之前的问题之间的区别是我添加了另一列,我也需要重新调整它。
我正在考虑使用
library(dplyr)
library(tidyr)
df %>%
group_by(id1) %>%
mutate(action_no = paste("action_time", row_number())) %>%
spread(action_no, value = c(action_time, action_comment))
但是当我在 value 参数中输入两个值时,它给了我一条错误消息:无效的列规范。
我真的很喜欢使用这种%>% 运算符来操作数据的想法,所以我很想知道如何更正我的代码以实现这一点。
非常感谢您的帮助
【问题讨论】: