Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于逗号将data.frame行拆分为多行_R_String - Fatal编程技术网

基于逗号将data.frame行拆分为多行

基于逗号将data.frame行拆分为多行,r,string,R,String,我正试图根据字符序列“,”在data.frame中拆分一行。下面是一个例子: mydat <- data.frame(v1 = c("name, name2", "name3", "name4, name5"), v2 = c("1, 2", "3", "4, 5"), v3 = c(1, 2, 3)) 有什么建议吗 这应该行得通 install.packages("splitstackshape") library(sp

我正试图根据字符序列“,”在
data.frame
中拆分一行。下面是一个例子:

mydat <- data.frame(v1 = c("name, name2", "name3", "name4, name5"),
                v2 = c("1, 2", "3", "4, 5"), 
                v3 = c(1, 2, 3))
有什么建议吗

这应该行得通

install.packages("splitstackshape")
library(splitstackshape)
out <- concat.split.multiple(mydat, c("v1","v2"), seps=",", "long")


out
     v1 v2 v3
1:  name  1  1
2: name2  2  1
3: name3  3  2
4: name4  4  3
5: name5  5  3
install.packages(“splitstackshape”)
库(splitstackshape)

out这里是另一种使用
data.table
包及其新的
tstrsplit
函数的方法

library(data.table) # v >= 1.9.5
setDT(mydat)[, lapply(.SD, tstrsplit, ", "), by = v3]
#    v3    v1 v2
# 1:  1  name  1
# 2:  1 name2  2
# 3:  2 name3  3
# 4:  3 name4  4
# 5:  3 name5  5

对于后代,倾向于使用
tidyverse
软件包的用户可以使用
tidyr
分隔行
功能以及
dplyr
中选择
(以保持列的顺序)来完成此操作:

library(tidyverse)

mydat %>% separate_rows(v1,v2,sep=", ") %>% 
        select(v1, v2, v3)

#     v1 v2 v3
#1  name  1  1
#2 name2  2  1
#3 name3  3  2
#4 name4  4  3
#5 name5  5  3

令人惊叹的!谢谢你把我的注意力转移到那个包裹上<不推荐使用代码>concat.split.multiple()
。改用
cSplit()
library(tidyverse)

mydat %>% separate_rows(v1,v2,sep=", ") %>% 
        select(v1, v2, v3)

#     v1 v2 v3
#1  name  1  1
#2 name2  2  1
#3 name3  3  2
#4 name4  4  3
#5 name5  5  3