我想基于分隔符在数据帧中将一列拆分为两列。例如,
METHAMPHETAMINE | MORPHINE
THC
成为
METHAMPHETAMINE MORPHINE
THC
在数据框内。
谢谢!
答案 0 :(得分:1)
一种选择是使用gsub()
识别并提取单列中垂直管道的任一侧:
df <- data.frame(col=c('METHAMPHETAMINE | MORPHINE', 'THC'))
df$col1 <- gsub("(.*)\\s*\\|.*", "\\1", df$col)
df$col2 <- ifelse(grepl(".*\\|\\s*(.*)", df$col),
gsub(".*\\|\\s*(.*)", "\\1", df$col),
"")
df
col col1 col2
1 METHAMPHETAMINE | MORPHINE METHAMPHETAMINE MORPHINE
2 THC THC
你的问题是一个曲线球,因为根据你的样本数据,我们可以看到数据框中的每一行都不会有一个带有第二列的管道。当找不到匹配项时,返回输入字符串是gsub()
的一个特性,但在我们的例子中,如果没有管道,我们只需要空字符串。这里的一个选择是使用grepl()
来首先检查模式是否匹配,如果不匹配,则返回空字符串。
可能是this question的副本,但是在那里给出答案的新应用将需要回答你的问题。
答案 1 :(得分:0)
> a1=read.csv("test.csv",header=F)
> a1
V1
1 METHAMPHETAMINE | MORPHINE
2 THC
> within(a1, FOO<-data.frame(do.call('rbind', strsplit(as.character(V1), '|', fixed=TRUE))))
V1 FOO.X1 FOO.X2
1 METHAMPHETAMINE | MORPHINE METHAMPHETAMINE MORPHINE
2 THC THC THC
这