我有一个日期框架:
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
重复3次,并且在每个code.n
中按时间顺序重复代码。
因此:
subj code.1 code.2 code.3
1 1 a b <NA>
2 2 a d e
任何和所有帮助表示赞赏。
答案 0 :(得分:8)
我们为分组列'subj'创建一个序列列,然后执行dcast
。我们可以使用dcast
中的data.table
。将'data.frame'转换为'data.table'(setDT(long)
),按'subj'分组,创建序列列'new',并使用dcast
从'long'转换为'wide'
library(data.table)#v1.9.6+
setDT(long)[, new:=paste('code', 1:.N, sep='.'), by = subj]
dcast(long, subj~new, value.var='code')
使用spread
方法创建序列列后,可以使用tidyr
dplyr
来完成此操作
library(dplyr)
library(tidyr)
long %>%
group_by(subj) %>%
mutate(new=paste('code', row_number(), sep='.')) %>%
spread(new, code)