r - 如何根据其他两个变量的条件填充新变量
问题描述
我想按国家/地区创建一个在特定年份取特定值的变量。
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 年的价格,并用该值填充每个观察值。有人可以在这里提供帮助吗?提前谢谢了。
解决方案
看起来您想为每年创建一个变量,因此您可以尝试这种方法来重塑数据,然后使用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")
推荐阅读
- java - Idea Intellij:Maven 自动生成的工件与手动创建的工件 - 只有自动工作(截图)
- azure - 为什么我的 sudo 命令适用于 ansible 但不适用于 ansible-playbook?
- macos - 启动 Mission Control 时如何隐藏我的 Electron 应用程序窗口?
- python - 只能比较具有相同标签的系列对象 Pandas Python
- hadoop - 无效的表别名或列引用“SYNTHJOIN_xxxxx”
- javascript - 实现用于链接类方法的 JS 装饰器
- r - 带有 tweenr/transformr 的形状的非平滑颜色过渡
- parsing - 解析器(POS、TAG、依赖)在机器翻译中的作用是什么?
- python - 计算线性回归曲线(如 tradingview 文档中所述)TALIB
- python - SKLearn 的 Birch Clustering 中的 partial_fit() 到底是什么,它可以用于非常大的数据集吗?