我有一个数据框,其中一列可能包含由 |
分隔的连接字符:
df <- data.frame(FOO = c('A|B|C', 'A|B', 'B|C', 'A', 'C'))
# df
# FOO
# 1 A|B|C
# 2 A|B
# 3 B|C
# 4 A
# 5 C
我想拆分字符串并将各个值放入不同的列中:df
# X1 X2 X3
# 1 A B C
# 2 A B
# 3 B C
# 4 A
# 5 C
到目前为止,我尝试过这个例子:[https://stackoverflow.com/questions/7069076/split-column-at-delimiter-in-data-frame][1] 但它没有在没有重复值的情况下拆分列,什么我到那里是:df <- data.frame(do.call('rbind', strsplit(as.character(df$FOO),'|',fixed=TRUE)))
> df
X1 X2 X3
1 A B C
2 A B A
3 B C B
4 A A A
5 C C C
我也收到了这个警告:Warning message: In rbind(c("A", "B", "C"), c("A", "B"), c("B", "C"), "A", "C") : number of columns of result is not a multiple of vector length (arg 2)
在这些情况下我能做什么?最好用
base
R。[1]:Split column at delimiter in data frame
最佳答案
简单地做:
splt <- strsplit(as.character(df$FOO),"\\|")
all_val <- sort(unique(unlist(splt)))
t(sapply(splt,function(x){all_val[!(all_val %in% x)]<-NA;all_val}))
# [,1] [,2] [,3]
#[1,] "A" "B" "C"
#[2,] "A" "B" NA
#[3,] NA "B" "C"
#[4,] "A" NA NA
#[5,] NA NA "C"
数据:
df <- data.frame(FOO = c('A|B|C', 'A|B', 'B|C', 'A', 'C'))
请注意:
我的版本是
base::
(不需要图书馆)和一般:它也适用于:
df <- data.frame(FOO = c('A|B|C', 'A|B', 'B|C', 'A', 'C', 'B|D|F'))
关于r - 将串联列拆分到相应的列位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51872267/