4 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊
帶著數(shù)據(jù)表包,這可以很容易地解決與新的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")
給出同樣的結(jié)果。
類似的方法,但現(xiàn)在使用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 關(guān)注
- 731 瀏覽
添加回答
舉報