基于逗号将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