我尝试使用基本 R 来使用这篇文章中的答案:将字符串拆分为 R 中的新行
split_dfcheck <- as.data.frame(do.call(rbind, apply(test, 1, function(x) {
do.call(expand.grid, strsplit(x, " *; *"))
})))
但是,当我在示例数据上使用它时:
test <-data.frame(name=c("Andrea;barbara;erica;Matteo","Matteo;sonia;marta","Matteo;sonia","sonia;marta;matteo" ), code=c("A", "A", "B", "B"),number=c(1,1,2,2),
surname=c("surname1;surname2;surname3;surname4", "surname1;surname2;surname3", "surname1;surname2","surname1;surname2;surname3"))
使用时我得到 38 行
separate_rows
我得到 12 行:
test1 <- test %>%
separate_rows(c(name,surname), , sep = ";")
有没有办法获得与
separate_rows
相同的结果,但使用基本 R?
谢谢!
你可以这样做:
test2 <- do.call("rbind", lapply(seq(nrow(test)), function(i) {
data.frame(name = strsplit(test$name[i], ';')[[1]],
code = test$code[i], number = test$number[i],
surname = strsplit(test$surname[i], ';')[[1]])
}))
这会导致
test2
#> name code number surname
#> 1 Andrea A 1 surname1
#> 2 barbara A 1 surname2
#> 3 erica A 1 surname3
#> 4 Matteo A 1 surname4
#> 5 Matteo A 1 surname1
#> 6 sonia A 1 surname2
#> 7 marta A 1 surname3
#> 8 Matteo B 2 surname1
#> 9 sonia B 2 surname2
#> 10 sonia B 2 surname1
#> 11 marta B 2 surname2
#> 12 matteo B 2 surname3