r - 将串联列拆分到相应的列位置

标签 r string dataframe split

我有一个数据框,其中一列可能包含由 | 分隔的连接字符:

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/

相关文章:

r - 生成带有绘图和可更新(动态)标题的 R Markdown Word.docx(图号)

r - facet_zoom 正在放大到不同的 x 轴值

regex - 从字符串中删除非数字和非字母字符?

c++ - 第 5 行 : Char 54: error: no matching function for call to 'min(int, std::__cxx11::basic_string<char>::size_type)'

python - 为每个类别python选择前10条记录

r - 在 mutate 和合并中使用变量名

r - 从(任意)连续概率分布进行模拟

c# - 如何将字符串数组连接成单个字符串?

scala - native snappy 库不可用

r - 按日期(年和月)合并 data.frame