for-while ifelse循环(R-编程)

eh57zj3b  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(129)

老实说,我完全卡住了,我也不知道该如何表达标题。我有两个数据集,假设它看起来像这样:
数据集1(即GDP相关):
| 年份|国家|
| - ------|- ------|
| 二○ ○ ○年|奥地利|
| 二○ ○一年|奥地利|
| 二○ ○ ○年|比利时|
| 二○ ○一年|比利时|
数据集2(税务相关):
| 年份|奥地利|比利时|
| - ------|- ------|- ------|
| 二○ ○ ○年|五十五|四十八|
| 二○ ○一年|五十一|四十五|
所以我想要的是生成某种函数/循环,它的基本意思是:

  • 如果dataset 1中country变量的名称是dataset 2中的列名,请使用以下观察结果
  • 然后,根据年份和国家,我想在dataset 1中创建一个名为tax的新变量,将数据集2中的国家税率应用到dataset 1中。

例如,我们知道Austria(观测)也是一个变量的名称,那么我想从dataset 2中获得这个税率,并对dataset 1中的2000年应用55,对2001年应用56。这将对所有国家和年份都适用。
因此应类似于数据集1(即GDP相关):
| 年份|国家|税收|
| - ------|- ------|- ------|
| 二○ ○ ○年|奥地利|五十五|
| 二○ ○一年|奥地利|五十一|
| 二○ ○ ○年|比利时|四十八|
| 二○ ○一年|比利时|四十五|
我的数据集相当大,因此如果我有某种算法来处理这个问题,那就更好了
谢谢!

yhxst69z

yhxst69z1#

假设第一个数据包含更多列,然后在使用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))
nsc4cvqm

nsc4cvqm2#

这也应该起作用:

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

相关问题