[英]for-while ifelse loop? (R-Programming)
老实说,我完全被卡住了,我也不太确定如何用标题来表达。 我有两个数据集,假设它看起来像这样:
Dataset1(即GDP相关):
年 | 国家 |
---|---|
2000 | 奥地利 |
2001年 | 奥地利 |
2000 | 比利时 |
2001年 | 比利时 |
数据集 2(与税收相关):
年 | 奥地利 | 比利时 |
---|---|---|
2000 | 55 | 48岁 |
2001年 | 51 | 45 |
所以我想要的是生成某种函数/循环,本质上说:
如果我们在数据集 1 中的国家/地区变量的名称是数据集 2 中的列名,请使用这些观察结果
然后,以年份和国家为条件,我想在数据集 1 中创建一个名为税的新变量,将数据集二中的国家税率应用到数据集 1 中。
因此,例如,我们知道奥地利(观察)也是一个变量的名称,那么我想从数据集 2 中获取此税率,并将 2000 年的 55 和 2001 年的 56 应用于数据集 1。 这将为所有国家和年份提供 go。
因此应该看起来像 Dataset1(即与 GDP 相关):
年 | 国家 | 税 |
---|---|---|
2000 | 奥地利 | 55 |
2001年 | 奥地利 | 51 |
2000 | 比利时 | 48岁 |
2001年 | 比利时 | 45 |
我的数据集很大,所以如果我对此有某种算法,那将是更好的选择
谢谢!
假设第一个数据有更多列,然后在使用pivot_longer
将第二个数据重塑为 long 之后,与匹配“Year”、“Country”的第一个数据( left_join
)进行连接
library(dplyr)
library(tidyr)
df2 %>%
pivot_longer(cols = -Year, names_to = 'Country', values_to = 'Tax') %>%
left_join(df1, .)
-输出
Year Country Tax
1 2000 Austria 55
2 2001 Austria 51
3 2000 Belgium 48
4 2001 Belgium 45
df1 <- structure(list(Year = c(2000L, 2001L, 2000L, 2001L), Country = c("Austria",
"Austria", "Belgium", "Belgium")), class = "data.frame", row.names = c(NA,
-4L))
df2 <- structure(list(Year = 2000:2001, Austria = c(55L, 51L), Belgium = c(48L,
45L)), class = "data.frame", row.names = c(NA, -2L))
这也应该有效:
library(dplyr)
library(tidyr)
df2 %>%
# pivot_longer(-Year) %>% first solution
pivot_longer(cols = -Year, names_to = 'Country', values_to = 'Tax') %>% # taken from @akrun
arrange(Country)
Year Country Tax
<int> <chr> <int>
1 2000 Austria 55
2 2001 Austria 51
3 2000 Belgium 48
4 2001 Belgium 45
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.