我想在基於分隔符的數據幀中將一列分成兩列。例如,將數據幀的列拆分爲多個列而不重複
METHAMPHETAMINE | MORPHINE
THC
到成爲
METHAMPHETAMINE MORPHINE
THC
數據幀內。
謝謝!
我想在基於分隔符的數據幀中將一列分成兩列。例如,將數據幀的列拆分爲多個列而不重複
METHAMPHETAMINE | MORPHINE
THC
到成爲
METHAMPHETAMINE MORPHINE
THC
數據幀內。
謝謝!
一種選擇是使用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的副本,雖然在那裏給出答案的新應用程序將需要回答你的問題。
> 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
從
不是很多,從可能重複的問題改變 - 'str_split_fixed(DF $關口,固定的( 「|」),2)' – thelatemail