我有一个混乱的数据集,在一列中有多个值,用;
分隔。我想为列中的每个单独值创建新行。例如:
ID Date Dx
1 10/1/15 anemia ; headache ;
2 10/1/15 migraine ; anemia ;
3 10/2/15 diabetes ;
将返回:
ID Date Dx
1 10/1/15 anemia
1 10/1/15 headache
2 10/1/15 migraine
2 10/1/15 anemia
3 10/2/15 diabetes
非常感谢任何帮助。我是新手R用户,这让我很难过。
答案 0 :(得分:3)
或使用?cSplit()
包中的splitstackshape
:
library(splitstackshape)
cSplit(df, 3, ";", "long")
# ID Date Dx
#1: 1 10/1/15 anemia
#2: 1 10/1/15 headache
#3: 2 10/1/15 migraine
#4: 2 10/1/15 anemia
#5: 3 10/2/15 diabetes
数据强>
df <- structure(list(ID = 1:3, Date = structure(c(1L, 1L, 2L), .Label = c("10/1/15",
"10/2/15"), class = "factor"), Dx = structure(c(1L, 3L, 2L), .Label = c("anemia ; headache ;",
"diabetes ;", "migraine ; anemia ;"), class = "factor")), .Names = c("ID",
"Date", "Dx"), class = "data.frame", row.names = c(NA, -3L))
答案 1 :(得分:2)
您可以使用unnest
包中的tidyr
功能:
library(data.table); library(tidyr);
setDT(df)[, Dx := list(strsplit(as.character(Dx), ";"))]
df %>% unnest(Dx)
Source: local data frame [5 x 3]
ID Date Dx
(int) (fctr) (chr)
1 1 10/1/15 anemia
2 1 10/1/15 headache
3 2 10/1/15 migraine
4 2 10/1/15 anemia
5 3 10/2/15 diabetes
答案 2 :(得分:0)
您无需为此繁琐的任务使用任何其他包。只需使用:
data.frame(ID = rep(mydf$ID, sapply(strsplit(mydf$DX, split = ";"), length)),Date= rep(mydf$Date, sapply(strsplit(mydf$DX, split = ";"), length)), DX = unlist(strsplit(mydf$DX, split = ";")))
答案 3 :(得分:-1)
使用基础R你可以尝试:
if ($('.modal-box.opened').find('video').attr(autoplay) == true) {