首页 > 解决方案 > 如何根据其他两个变量的条件填充新变量

问题描述

我想按国家/地区创建一个在特定年份取特定值的变量。

Country Year Price Price_2018
   A    2016  1      4
   A    2017  3      4
   A    2018  4      4
   B    2016  1      5
   B    2017  7      5
   B    2018  5      5
   C    2016  1      3
   C    2017  6      3
   C    2018  3      3

如上所述,我想创建变量 Price_2018,对于每个国家/地区,取 2018 年的价格,并用该值填充每个观察值。有人可以在这里提供帮助吗?提前谢谢了。

标签: rtidyversedplyr

解决方案


看起来您想为每年创建一个变量,因此您可以尝试这种方法来重塑数据,然后使用tidyverse函数进行合并:

library(tidyverse)
#Code
newdf <- df %>% left_join(df %>%
  mutate(Year=paste0('Price_',Year)) %>%
  pivot_wider(names_from = Year,values_from=Price))

输出:

  Country Year Price Price_2016 Price_2017 Price_2018
1       A 2016     1          1          3          4
2       A 2017     3          1          3          4
3       A 2018     4          1          3          4
4       B 2016     1          1          7          5
5       B 2017     7          1          7          5
6       B 2018     5          1          7          5
7       C 2016     1          1          6          3
8       C 2017     6          1          6          3
9       C 2018     3          1          6          3

如果你只想2018

#Code 2
newdf <- df %>% left_join(df %>% filter(Year==2018) %>%
  mutate(Year=paste0('Price_',Year)) %>%
  pivot_wider(names_from = Year,values_from=Price))

输出:

  Country Year Price Price_2018
1       A 2016     1          4
2       A 2017     3          4
3       A 2018     4          4
4       B 2016     1          5
5       B 2017     7          5
6       B 2018     5          5
7       C 2016     1          3
8       C 2017     6          3
9       C 2018     3          3

使用的一些数据:

#Data
df <- structure(list(Country = c("A", "A", "A", "B", "B", "B", "C", 
"C", "C"), Year = c(2016L, 2017L, 2018L, 2016L, 2017L, 2018L, 
2016L, 2017L, 2018L), Price = c(1L, 3L, 4L, 1L, 7L, 5L, 1L, 6L, 
3L)), row.names = c(NA, -9L), class = "data.frame")

推荐阅读