我有一个数据框,如下所示:
data.frame(director = c("Aaron Blaise,Bob Walker", "Akira Kurosawa",
"Alan J. Pakula", "Alan Parker", "Alejandro Amenabar", "Alejandro Gonzalez Inarritu",
"Alejandro Gonzalez Inarritu,Benicio Del Toro", "Alejandro González Iñárritu",
"Alex Proyas", "Alexander Hall", "Alfonso Cuaron", "Alfred Hitchcock",
"Anatole Litvak", "Andrew Adamson,Marilyn Fox", "Andrew Dominik",
"Andrew Stanton", "Andrew Stanton,Lee Unkrich", "Angelina Jolie,John Stevenson",
"Anne Fontaine", "Anthony Harvey"), AB = c('A', 'B', 'A', 'A', 'B', 'B', 'B', 'A', 'B', 'A', 'B', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'A'))
Run Code Online (Sandbox Code Playgroud)
如您所见,director列中的某些条目是由逗号分隔的多个名称.我想将这些条目拆分为单独的行,同时保持另一列的值.例如,上面数据框中的第一行应该分成两行,director列中各有一个名称,列中有"A" …
我有数据,其中一些项目是由"|"分隔的数字,如:
head(mintimes)
[1] "3121|3151" "1171" "1351|1381" "1050" "" "122"
head(minvalues)
[1] 14 10 11 31 Inf 22
Run Code Online (Sandbox Code Playgroud)
我想要做的是提取所有时间并将它们与最小值匹配.最终结果如下:
times values
3121 14
3151 14
1171 10
1351 11
1381 11
1050 31
122 22
Run Code Online (Sandbox Code Playgroud)
我试过了strsplit(mintimes, "|"),str_extract(mintimes, "[0-9]+")但我尝试过,但似乎没有用.有任何想法吗?
有人可以帮我解决这个问题吗?任何建议都非常感谢!
我开始时:
A <- data.frame(stringsAsFactors = F)
A <- edit(A)
Run Code Online (Sandbox Code Playgroud)
然后我为A填写了一些值,所以它看起来像这样:
A
var1 var2
1 a x,y,z
2 b p,q
3 c g,h
Run Code Online (Sandbox Code Playgroud)
我的目标是以这种形式获得数据框:
var1 var2
1 a x
2 a y
3 a z
4 b p
5 b q
6 c g
7 c h
Run Code Online (Sandbox Code Playgroud)
这就是我尝试实现它的方式:
A2 <- data.frame(stringsAsFactors = F)
for(i in 1:nrow(A)){
if(grepl(",", A[i,2])){
split <- unlist(strsplit(A[i,2], ","))
for(j in 1:length(split)){
newrow <- c(A[i,1],split[j])
A2 <- rbind(A2, newrow)
}
}else{
A2 <- rbind(A2, A[i,])
}
} …Run Code Online (Sandbox Code Playgroud)