首页 > 解决方案 > 基于 R 上的另一个矩阵在数据框中创建一个变量

问题描述

我在执行以下任务时遇到了一些问题我有一个此类数据框,其中包含 99 个不同国家/地区的数千个 ID

   ID  Nationality  var 1 var 2 ....
    1  Italy         //
    2  Eritrea       //
    3  Italy        //
    4  USA
    5  France
    6  France
    7  Eritrea
    ....

我想添加一个与给定的国籍宏区域相对应的变量,所以我创建了一个此类矩阵,并遵循以下规则

Nationality Continent
Italy       Europe
Eritrea     Africa
Usa         America
France      Europe
Germany     Europe
....

我想得到这个

        ID  Nationality  var 1 var 2 Continent
        1  Italy         //          Europe   
        2  Eritrea       //          Africa
        3  Italy        //           Europe
        4  USA                       America
        5  France                    Europe
        6  France                    Europe
        7  Eritrea                   Africa
        ....

我正在尝试使用此命令

datasubset <- merge(dataset , continent.matrix )

但它不起作用,它报告以下错误 Error: cannot allocate vector of size 56.6 Mb

这对我来说似乎很奇怪,还试图将此代码应用于它不起作用的子集。你对如何进行有什么建议吗?

非常感谢您的帮助,我希望我的问题听起来不太琐碎,但我对 R 很陌生

标签: rdataframematrixvector

解决方案


您可以使用left_join函数(dplyr 的库)执行此操作:

library(dplyr)
df <- tibble(ID=c(1,2,3),
             Nationality=c("Italy", "Usa", "France"),
             var1=c("a", "b", "c"),
             var2=c(4,5,6))

nat_cont <- tibble(Nationality=c("Italy", "Eritrea", "Usa", "Germany", "France"),
                   Continent=c("Europe", "Africa", "America", "Europe", "Europe"))


df_2 <- left_join(df, nat_cont, by=c("Nationality"))

输出:

> df_2
# A tibble: 3 x 5
     ID Nationality var1   var2 Continent
  <dbl> <chr>       <chr> <dbl> <chr>    
1     1 Italy       a         4 Europe   
2     2 Usa         b         5 America  
3     3 France      c         6 Europe

推荐阅读