我有一个日期框架:
long <- data.frame(subj = c(1,1,2,2,2), code = c("a", "b", "a", "d", "e"))
subj code
1 1 a
2 1 b
3 2 a
4 2 d
5 2 e
我似乎无法将数据结构化为 code
对每个 subj
和每个 code.n
重复 3 次> 是按时间顺序排列的代码。
因此:
subj code.1 code.2 code.3
1 1 a b <NA>
2 2 a d e
感谢任何帮助。
最佳答案
我们为分组列“subj”创建一个序列列,然后执行dcast
。我们可以使用 data.table
中的 dcast
。将 'data.frame' 转换为 'data.table' (setDT(long)
),按 'subj' 分组,创建序列列 'new' 并从 'long' reshape 为 'wide'使用 dcast
。
library(data.table)#v1.9.6+
setDT(long)[, new:=paste('code', 1:.N, sep='.'), by = subj]
dcast(long, subj~new, value.var='code')
或者这可以在使用 dplyr
方法创建序列列之后通过 tidyr
的 spread
完成
library(dplyr)
library(tidyr)
long %>%
group_by(subj) %>%
mutate(new=paste('code', row_number(), sep='.')) %>%
spread(new, code)
关于r - 从长到宽的结构化 R Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721106/