r语言 - 如何使用另一个数据帧中的字段值调用包含列的值



我正在尝试将每年的值从df_2移动到df_1

countries <- c("USA","Canada","Denmark","Albania", "Turkey","France", "Italy")
values <- c(100, 1000, 300, 300,7000, 8343,9211)
year <- c(2007,2008,2009,2008,2008,2009,2008)
df_1 <- data.frame(countries, values, stringsAsFactors = FALSE)
countries <- c("USA","Canada","Denmark","Albania", "Turkey","France", "Italy")
`2007` <- c(2,3,5,6,7,8,8)
`2008` <- c(23,23,65,86,97,98,68)
`2009` <- c(12,33,35,46,67,78,88)
df_2 <- data.frame(countries, `2007`, `2008`, `2009`, stringsAsFactors = FALSE)

关于如何解决这个问题的Mi想法:

df_1 <- dplyr::mutate(df_1, ifelse((df_1$country == df_2$country), df_2$(df_1$year), 0)

预期结果是,新列包含每个年份和国家/地区的值:

df_1$value_that_year <- c(2,23,35,86,97,78,68)

我假设您忘记在df_1中包含year列,不幸的是,这使您的示例不可重现。

让我们添加一个yeardf_1,根据该列,我们从df_2中选择条目。

countries <- c("USA","Canada","Denmark","Albania", "Turkey","France", "Italy")
values <- c(100, 1000, 300, 300,7000, 8343,9211)
year <- c(2007,2008,2009,2008,2008,2009,2008)
df_1 <- data.frame(countries, values, year, stringsAsFactors = FALSE)

然后,这变成了一个简单的问题,即df_2从宽到长,然后使用right_join将两个data.frame连接在year上。

library(tidyverse)
df_2 %>%
gather(year, value_that_year, -countries) %>%
mutate(year = as.numeric(sub("X", "", year))) %>%
right_join(df_1)
#  countries year value_that_year values
#1       USA 2007               2    100
#2    Canada 2008              23   1000
#3   Denmark 2009              35    300
#4   Albania 2008              86    300
#5    Turkey 2008              97   7000
#6    France 2009              78   8343
#7     Italy 2008              68   9211

相关内容

最新更新