【问题标题】:Merge two dataframes by different columns with a loop使用循环合并不同列的两个数据框
【发布时间】:2021-09-16 07:11:11
【问题描述】:

我正在尝试使用 (for?) 循环自动匹配两个数据帧。

> df_key
  country_election keyword1 keyword2   keyword3 keyword4  keyword5
1           France    Paris    Rome      Madrid   London Marseille
2            Spain Valencia   Berlin Manchester   Zurich     Milan
> df_country
         city        country
1       Paris         France
2        Rome          Italy
3      Madrid          Spain
4      London United Kingdom
5   Marseille         France
6    Valencia          Spain
7      Berlin        Germany
8  Manchester United Kingdom
9      Zurich    Switzerland
10      Milan          Italy

在此示例中,我想将df_key 中的每个关键字与df_country 匹配以添加国家/地区列。

  country_election keyword1 country_1 keyword2 country_2   keyword3      country_3
1           France    Paris    France    Rome      Italy     Madrid          Spain
2            Spain Valencia     Spain   Berlin   Germany Manchester United Kingdom

最后,我还希望有一系列虚拟变量检查country_i 是否等于country_election。非常感谢您的帮助。

df_key <- structure(list(country_election = c("France", "Spain"), keyword1 = c("Paris", "Valencia"), 
keyword2 = c("Rome ", "Berlin"), keyword3 = c("Madrid", "Manchester"), keyword4 = c("London", "Zurich"), 
keyword5 = c("Marseille", "Milan")), class = "data.frame", row.names = c(NA, -2L))

df_country <- structure(list(city = c("Paris", "Rome", "Madrid", "London", "Marseille", "Valencia", 
"Berlin", "Manchester", "Zurich", "Milan"), country = c("France", "Italy", "Spain", "United Kingdom", 
"France", "Spain", "Germany", "United Kingdom", "Switzerland", "Italy")), 
class = "data.frame", row.names = c(NA, -10L))

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    您可以match 城市名称,提取国家并创建新列。如果列顺序很重要,请从中提取数字部分并order 数据。

    cols <- sub('keyword', 'country', names(df_key[-1]))
    df_key[cols] <- df_country$country[match(as.matrix(df_key[-1]), df_country$city)]
    df_key[order(as.numeric(sub('\\D+', '', names(df_key))), na.last = FALSE)]
    
    #  country_election keyword1 country1 keyword2 country2   keyword3
    #1           France    Paris   France     Rome    Italy     Madrid
    #2            Spain Valencia    Spain   Berlin  Germany Manchester
    
    #        country3 keyword4       country4  keyword5 country5
    #1          Spain   London United Kingdom Marseille   France
    #2 United Kingdom   Zurich    Switzerland     Milan    Italy
    

    【讨论】:

    • 非常感谢,在示例中它运行良好!然而,在我的完整数据集中,我有一个(我猜)取决于 NA 的问题。由于我在keyword_i 列中有一些缺失值(并不总是相同),我得到Error: Assigned data value must be compatible with existing data. 你知道我该如何解决吗?
    • 我认为你有一个小标题。尝试使用 df_key &lt;- data.frame(df_key)df_country &lt;- data.frame(df_country) 将其更改为数据框,然后重试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-09-23
    • 1970-01-01
    • 2020-10-20
    • 2022-01-10
    • 2015-03-21
    相关资源
    最近更新 更多