R将n个观察值从一个数据帧转移到另一个数据帧(处理观察值较少的情况)

时间:2019-04-26 13:48:46

标签: r data-manipulation

我有两个这样的示例数据帧(z1和z2):

City1 = c(1,1,1,2,2,3,3,3)
z1 = data.frame(City1)

City2 = c(1,1,1,1,1,2,3,3)
Tax2=c(16,93,96,44,67,73,12,10)
z2 = data.frame(City2,Tax2)

我想做的是从z1中的z2中获取给定城市(分别为City1和City2)的Tax2的最高n值。问题在于两个数据帧中的观察数不相同。

案例1:

nrow(z2)> = nrow(z1)的情况下,我想获取最前面的nrow(z1)数据并将其放在z1中。

例如:对于城市1:nrow(z2)= 5且nrow(z1)= 3,在这种情况下,我想从z2中查找Tax2的前3个值并将其合并到z1中。这可以通过City1的以下代码来实现:

cit=1
z1_data=z1[z1$City1==cit,]
z2_data=z2[z2$City2==cit,]
z2_data_sort=z2_data[order(z2_data$Tax2,decreasing = T),]
for (i in 1:nrow(z1_data)){
  z1_data[i,"Tax_lookup"]=z2_data_sort[i,"Tax2"]
}

案例2:

但是当相反情况为 nrow(z2)时,就会出现问题。 在这种情况下,我想从z2中获取第一行,然后为z1中的其他观察重复最后一个元素。例如,如果我们考虑City == 3:

如果我对City == 3运行上面的代码,我得到的输出是:

   City1 Other_var Tax_lookup

     3         f         12
     3         g         10
     3         h         NA

我想要的输出是:

   City1 Other_var Tax_lookup

     3         f         12
     3         g         10
     3         h         10 ---- **This value is repeated**

我将如何在R中执行此操作?任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我从here过了一会儿就找到了答案:

library(zoo)

z1_data %>% 
do(na.locf(.))