在列表中存储的数据框中拆分列

时间:2019-01-25 08:31:43

标签: r

我是处理列表中存储的数据帧的新手,并且存在以下问题:

假设,我有一个存储在列表中的各种相似数据帧的列表。

单个数据帧(df)如下所示:

A  B    C    D

a. 0|0. 1|1  10 

b. 0|1. 0|1  20

c. 1|1. 1|0  30

d. 1|0. 0|0  40

输出:

    A  B_1  B_2 C_1 C_2   D

    a.  0   0.   1.  1.   10 

    b.  0   1    0.  1    20

    c.  1.  1.   1.  0    30

    d.  1.  0.   0.  0    40

我可以针对单个数据帧执行此操作

library(splitstackshape)
cSplit(df, 2:3, sep = "|", type.convert = FALSE)

但是现在我有多个相似的数据帧存储在一个列表(列表的列表)中,并且我要拆分的列的索引并不总是相同,但是可以变化。

我写了这样的东西:

list_splitted <- lapply(list_to_split, function(x) {(str_split(x[[i]],  "|"))})

但是似乎拆分了列,但是列表内所有数据框中的所有其他列均已删除。

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

我想我找到了解决问题的方法:

list_ALL2<-list()
for(i in seq_along(list_ALL)){
  list_ALL2[[i]]<-cSplit(list_ALL[[i]], 7:length(list_ALL[[i]]), sep="|", type.convert = F)
}

这将创建一个空列表(list_ALL2),并使用通过将cSplit应用于列表中存储的所有数据帧的列而创建的元素填充列表(list_ALL)。要排序的列数是从第7列到数据帧的末尾,可以变化。列包含|在cSplit中用作sep参数的字符。