首页 > 解决方案 > 在 lapply 中使用 join 时如何停止复制我的数据框?

问题描述

我有四个数据框,其中包含来自四个国家的数据。每个数据框仅包含来自一个国家/地区的数据。首先,我创建了一个变量Country,以便在我加入时知道哪些 ID 属于哪些国家/地区。

我想把四个人一起加入。当我使用所有数据帧时,问题就lapply来了。full_join由于我将sample_MAL数据帧保持不变,因此每次循环时它都会在我的输出数据帧中full_join重复。sample_MAL我显然需要它不要那样做。由于我可以拥有多达 100 个国家/地区的数据框,因此我想要一个循环解决方案以避免必须手动完成所有操作。

#Create a data frame with each of the vendor IDs, labeled by country
IND <- tibble(rid = 1:10, PID = 1:10)
MAL <- tibble(rid = 11:24, PID = 11:24)
US <- tibble(rid = 25:41,PID = 25:41)
HK <- tibble(rid = 42:99, PID = 42:99)

#Adds the Country variable with values in each data frame
sample_IND <- IND %>% mutate(Country = "Indonesia") %>% select(PID,rid,Country)
sample_MAL <- MAL %>% mutate(Country = "Malaysia") %>% select(PID,rid,Country)
sample_HK <- HK %>% mutate(Country = "Hong Kong") %>% select(PID,rid,Country)
sample_US <- US %>% mutate(Country = "United States") %>% select(PID,rid,Country)

#Creates a list of 3 of my 4 data frames
df.list <- list(sample_IND,sample_HK,sample_US)

#Apply inner_joins across the list to the sample_MAL data frame
joined_df <- lapply(df.list, FUN = function(var){
                full_join(sample_MAL,var)})

new.df <- bind_rows(joined_df)

当我summarize查看数据时,我看到它sample_MAL已经重复了 3 次,因为它有 42n,而它应该有 14n。

new.df %>% 
    group_by(Country) %>% 
    summarize(
        n = n()
    )

我知道我可以使用unique()重复数据删除,在这种情况下效果很好,但我希望找到一种解决方案,可以在第一次正确连接所有文件。

标签: rdplyrtidyverse

解决方案


推荐阅读