【问题标题】:Replacing all column values between two dataframes in r替换r中两个数据框之间的所有列值
【发布时间】:2021-02-16 04:12:38
【问题描述】:

我有两个数据框。一个包含对我正在研究的主题的观察。但是,由于调查,变量从显示参与者的国家名称转换为数字,因此我下载了一个表格,其中国家获得的代码(例如 31 是加拿大等)在带有数字和国家/地区的 df 中。 我想用第二个数据框中的国家/地区替换原始数据框中的数字,但每次都失败。

这里我使用一个示例数据框:

df1 <- data.frame(list(Country=c("1","3","4","2"), Obs=c("Stuff1","Stuff2","Stuff3","Stuff4")))
df2 <- data.frame(list(Number=c("1","2","3","4"), Country=c("C1","C2","C3","C4")))

我想要的结果是df1中的Country变量从数字转换为国家名称(它们都是我的数据集中的字符变量,包括国家数字,如果更好可以转换为数字)。

尝试以下方法后,到目前为止我失败了:

df1 <- df1 %>% 
  mutate_at(c("Country"), funs(recode(.,'df1[,1]'=df2[,2])))

df1$newcountry <- data$Country[match(df1$Country, df2$Country)]

【问题讨论】:

    标签: r dataframe replace dplyr data-wrangling


    【解决方案1】:
    library(tidyverse)
    df1 <- data.frame(list(Country=c("1","3","4","2"), 
                           Obs=c("Stuff1","Stuff2","Stuff3","Stuff4")))
    df2 <- data.frame(list(Number=c("1","2","3","4"), 
                           Country=c("C1","C2","C3","C4")))
    
    df1 %>% rename(Number = Country) %>% 
      left_join(df2, by = "Number")
    
      Number    Obs Country
    1      1 Stuff1      C1
    2      3 Stuff2      C3
    3      4 Stuff3      C4
    4      2 Stuff4      C2
    

    【讨论】:

      【解决方案2】:

      这行得通吗:

      library(dplyr)
      df1 %>% inner_join(df2, by = c('Country' = 'Number')) %>% 
      rename(N = Country, Country = Country.y) %>% select(-1)
           Obs Country
      1 Stuff1      C1
      2 Stuff2      C3
      3 Stuff3      C4
      4 Stuff4      C2
       
      

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 1970-01-01
        • 2017-06-17
        • 2022-01-16
        • 2022-01-14
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多