r-用几个分隔符分隔单元格(splitstackshape)



我正在处理一个应该用几个分隔符分隔的数据库。最常见的是分号和后跟斜线的点:"./"。

如何完成代码以应用两个分隔符?

library(tidyverse)
library(splitstackshape)
values <- c("cat; dog; mouse", "cat ./ dog ./ mouse")
data <- data.frame(cbind(values))
separated <- cSplit(data.frame(data), "values", sep = ";", drop = TRUE)

我尝试了矢量解决方案,但没有取得多大成功。

我不确定你的最终输出结构应该是什么,但一种方法可以从tidy::separate开始,它会把你的所有动物放在一个单独的列中:

df <- tidyr::separate(data, col = values, 
into = c("Animal1", "Animal2", "Animal3"), 
sep = c(";|./"))
#. Animal1 Animal2 Animal3
#1     cat     dog   mouse
#2     cat     dog   mouse

如果每个字符串中没有预定义数量的元素,您也可以尝试:

# Add in a third value to data with only 2 animals
values <- c("cat; dog; mouse", "cat ./ dog ./ mouse", "frog; squirrel")
data <- data.frame(cbind(values))

data_clean <- gsub(";|./", ";", data$values)
separated <- splitstackshape::cSplit(data.frame(values = data_clean), 
"values", sep = ";", drop = TRUE)
#    values_1 values_2 values_3
# 1:      cat      dog    mouse
# 2:      cat      dog    mouse
# 3:     frog squirrel     <NA>

最新更新