繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM