我正在处理一个应该用几个分隔符分隔的数据库。最常见的是分号和后跟斜线的点:"./"。
如何完成代码以应用两个分隔符?
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>