4 回答
TA贡献1836条经验 获得超3个赞
带着数据表包,这可以很容易地解决与新的rowid职能:
library(data.table)
dcast(setDT(d1),
Name ~ rowid(Name, prefix = "medication"),
value.var = "MedName")
这意味着:
Name medication1 medication2 medication3
1 Name1 atenolol 25mg aspirin 81mg sildenafil 100mg
2 Name2 atenolol 50mg enalapril 20mg <NA>
另一种方法(通常在1.9.7版本之前使用):
dcast(setDT(d1)[, rn := 1:.N, by = Name],
Name ~ paste0("medication",rn),
value.var = "MedName")
给出同样的结果。
类似的方法,但现在使用dplyr和提尔一揽子:
library(dplyr)
library(tidyr)
d1 %>%
group_by(Name) %>%
mutate(rn = paste0("medication",row_number())) %>%
spread(rn, MedName)
这意味着:
Source: local data frame [2 x 4]
Groups: Name [2]
Name medication1 medication2 medication3
(fctr) (chr) (chr) (chr)
1 Name1 atenolol 25mg aspirin 81mg sildenafil 100mg
2 Name2 atenolol 50mg enalapril 20mg NA
- 4 回答
- 0 关注
- 707 浏览
添加回答
举报