我正在尝试将每年的值从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
列,不幸的是,这使您的示例不可重现。
让我们添加一个year
列df_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