【问题标题】:R take n observations from one dataframe to another (deal with cases when fewer observations are present)R 从一个数据帧到另一个数据帧进行 n 次观察(处理存在较少观察值的情况)
【发布时间】:2019-04-26 13:48:45
【问题描述】:

我有两个示例数据框(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 中做到这一点?任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 只需复制并粘贴您的输出。除了情节,通常不鼓励使用图像。请编辑删除图像并简单地复制粘贴。
  • 感谢@NelsonGon 指出这一点。我已经编辑了问题。

标签: r data-manipulation


【解决方案1】:

我从here一点点找到了答案:

library(zoo)

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

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多