dplyr :: bind_cols(在组合多个data.frames时删除第一列)

时间:2017-01-13 02:32:34

标签: r dplyr

我有大约50个data.frames。它们是不同模拟的结果

data.frames的示例如下

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5")
measured_s1 <- c(21:25)
simulated_s1 <- c(22:26)
df <- data.frame(SiteID, measured_s1, simulated_s1)

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5")
measured_s2 <- c(21:25)
simulated_s2 <- c(21.5:25.5)
df_s2 <- data.frame(SiteID, measured_s2, simulated_s2)

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5")
measured_s3 <- c(21:25)
simulated_s3 <- c(21.2:25.2)
df_s3 <- data.frame(SiteID, measured_s3, simulated_s3)

我想把所有这些结合起来。我是使用bind_cols

完成的
dplyr::bind_cols(df, df_s2, df_s3)
      SiteID measured_s1 simulated_s1 SiteID measured_s2 simulated_s2 SiteID measured_s3 simulated_s3
  #1  Site1          21           22  Site1          21         21.5  Site1          21         21.2
  #2  Site2          22           23  Site2          22         22.5  Site2          22         22.2
  #3  Site3          23           24  Site3          23         23.5  Site3          23         23.2
  #4  Site4          24           25  Site4          24         24.5  Site4          24         24.2
  #5  Site5          25           26  Site5          25         25.5  Site5          25         25.2

但是导致SiteID列在bind_cols

生成的最终data.frame中重复了多次

现在,可以通过手动删除重复的SiteID或将dfdf_s2df_s3转换为long data.frame,然后使用full_join SiteID来解决此问题。 1}}。

在组合data.frames时,有没有更好的方法来删除SiteID列?

2 个答案:

答案 0 :(得分:1)

您可以将数据框放在列表中,然后使用SharedPreferences pre = getSharedPreferences("share_preference_file_name", MODE_PRIVATE); SharedPreferences.Editor edit=pre.edit(); edit.getInt("number", 0); // 0 is a default number if no value on given key 函数在Reduce列上逐个加入它们:

SiteID

或者为了避免Reduce(dplyr::full_join, list(df, df_s2, df_s3)) # SiteID measured_s1 simulated_s1 measured_s2 simulated_s2 measured_s3 simulated_s3 #1 Site1 21 22 21 21.5 21 21.2 #2 Site2 22 23 22 22.5 22 22.2 #3 Site3 23 24 23 23.5 23 23.2 #4 Site4 24 25 24 24.5 24 24.2 #5 Site5 25 26 25 25.5 25 25.2 进程,并且您知道所有数据框都已很好地对齐,您可以使用join删除SiteID列,然后使用lapply }:

do.call(bind_cols, ...)

答案 1 :(得分:1)

我们可以使用base R方法来执行此操作

 Reduce(function(...) merge(..., all = TRUE), mget(ls(pattern = "df.*")))