我有大约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
现在,可以通过手动删除重复的SiteID或将df
,df_s2
和df_s3
转换为long data.frame,然后使用full_join
SiteID
来解决此问题。 1}}。
在组合data.frames时,有没有更好的方法来删除SiteID列?
答案 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.*")))