【问题标题】:rbind data frames only for same columnsrbind 数据帧仅用于相同的列
【发布时间】:2016-03-08 16:13:33
【问题描述】:

我需要合并 24 个数据框。 20 个数据框有相同的 238 列,而 4 个数据框有 256 列。此外,这 4 个 256 列的数据帧与其他 20 个数据帧的列顺序不同。

例如'answer'、'condition'、'msg_time'、'fix'等(20个数据帧)

例如'acc_value'、'nitem'、'fix'、'button_press_0'、'rotation'、'previous_fix'、'accuracy'、'answer'、'file'、'condition'等(4个数据框)

我想仅对所有 24 个数据帧中相同的列进行 rbind。 任何建议将不胜感激。谢谢。

【问题讨论】:

  • 看看rbind.fill来自plyr包,rbindlist来自data.tablebind_rows来自dplyr

标签: r dataframe rbind


【解决方案1】:

这不是最优雅的解决方案,但它确实有效。

df <- data.frame()            # empty data.frame
base_names <- names(a)        # base_names will reflect any data.frame that has 238 observations
list_df <- list(a, b, c)      # list of all your data frames

for(item in list_df){         # create loop

  items <- item[, base_names] # only select columns that match the 238 columns
  df <- rbind(df, items)      # append those to the data.frame

}

df                            # all data.frames rbinded

如果你想避免循环,你也可以使用 lapply

library(plyr)
library(dplyr) 

df <- data.frame()
base_names <- names(a)
list_df <- list(a, b, c)  

lapply(list_df,
       function(x){

         x_cols <- x[, base_names]
         df <- rbind(df, x_cols)

       }) %>% plyr::ldply(rbind)

【讨论】:

  • 非常感谢@maloneypatr。我已经尝试了您的两种解决方案。但是,对于循环,我收到此错误:“[.data.frame(item, , base_names) 中的错误:选择了未定义的列”。对于第二种解决方案,您使用“%>%”是否有原因?因为它给出了一个错误。谢谢。
  • 不知道为什么,但我将 'item' 更改为 'items',并将 'items' 更改为 'dataframes',现在循环可以工作了。这需要一段时间,但它工作正常! :) 谢谢。
  • 啊,是的,我使用 dplyr 包中的 %&gt;%。我将编辑代码以反映
猜你喜欢
  • 1970-01-01
  • 2015-04-18
  • 2019-11-05
  • 2010-12-11
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多