在R中一次拆分多个列

时间:2017-12-12 09:55:38

标签: r split extract multiple-columns

我正在尝试拆分包含354(a1-a354)列的数据框。 例如:

  a1 a2
1 aa aa
2 bb bb
3 cc cc

目前,我使用以下代码:

df1<- extract(df1,1, c("D","M"), "(.)(.)",convert=TRUE) 

当我一次在一列上使用它时(我不关心列名),这非常有效,但是因为我有354列,所以我试图循环它。到目前为止,我已经尝试制作一个函数,所以我可以使用lapply。我也试过for循环。我总是得到 错误:数据源必须是字典

我一直在尝试以下方法:

colseparator <- function(x) {
 df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE)
}

我试过的其他事情是

 for (x in c(7,9,11)){
      df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE)
   }

我的方法都没有用,显然我做错了。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

有几种选择。一种方法是将paste行放在一起,使用gsub创建分隔符并使用read.table/read.csv读取

read.table(text=gsub('(?<=[a-z])(?=[a-z])', ',', do.call(paste, df1),
             perl = TRUE), header = FALSE, stringsAsFactors=FALSE, sep=',')

或者我们可以通过循环遍历列,然后strsplit

rbind分开
do.call(rbind, lapply(df1, function(x) do.call(rbind, strsplit(x, "(?<=.)", perl = TRUE))))