【问题标题】:Equivalent of index - match in Excel to return greater than the lookup value等价于索引 - 在 Excel 中匹配以返回大于查找值
【发布时间】:2016-02-29 22:55:09
【问题描述】:

在 R 中,我需要执行与 Excel 中的索引匹配类似的功能,它返回的值刚好大于查找值。

数据集 A

Country     GNI2009           
Ukraine     6604
Egypt       5937
Morocco     5307
Philippines 4707
Indonesia   4148
India       3677
Viet Nam    3180
Pakistan    2760
Nigeria     2699

数据集 B

GNI2004 s1  s2  s3  s4
6649    295 33  59  3
6021    260 30  50  3
5418    226 27  42  2
4846    193 23  35  2
4311    162 20  29  2
3813    134 16  23  1
3356    109 13  19  1
2976    89  10  15  1
2578    68  7   11  0
2248    51  5   8   0
2199    48  5   8   0

在每个国家/地区的 2009 年级别 GNI(数据集 A)我想找出哪个 GNI2004 刚好大于或等于 GNI2009,然后在该行返回相应的销售值(s1,s2...) (数据集 B)。我想对表 A 中 2009 年的每个 Country-gni 行重复此操作。

例如:Nigeria 在数据集 A 中带有 GNI2009 of 2698 将返回:

GNI2004 s1  s2  s3  s4
2976    89  10  15  1

在 Excel 中,我猜这类似于索引和匹配,其中匹配条件为 match(look up value, look uparray,-1)

【问题讨论】:

标签: r excel indexing match lookup


【解决方案1】:

您可以尝试data.tables 滚动连接,它旨在实现这一目标

library(data.table) # V1.9.6+
indx <- setDT(DataB)[setDT(DataA), roll = -Inf, on = c(GNI2004 = "GNI2009"), which = TRUE]
DataA[, names(DataB) := DataB[indx]]
DataA  
#        Country GNI2009 GNI2004  s1 s2 s3 s4
# 1:     Ukraine    6604    6649 295 33 59  3
# 2:       Egypt    5937    6021 260 30 50  3
# 3:     Morocco    5307    5418 226 27 42  2
# 4: Philippines    4707    4846 193 23 35  2
# 5:   Indonesia    4148    4311 162 20 29  2
# 6:       India    3677    3813 134 16 23  1
# 7:    Viet Nam    3180    3356 109 13 19  1
# 8:    Pakistan    2760    2976  89 10 15  1
# 9:     Nigeria    2699    2976  89 10 15  1

这里的想法是在GNI2009 中的每一行中找到GNI2004 中最接近的相等/更大的值,获取行索引和子集。然后我们用结果更新DataA


更多信息请参见here

【讨论】:

  • 谢谢。但在我开始之前,当我尝试运行 library(data.table) 时,它说没有这样的包,即使我已经使用 install.packages 安装了它。
  • 说有些依赖不可用,一开始还是试了很多镜像
  • 试试install.packages("data.table", dependencies = TRUE)install.packages("data.table", dependencies = "Depends")。有关详细信息,请参阅?install.packages
  • 有效!谢谢 :) 我试过 install.packages("data.table", dep= T, "install path") 想知道出了什么问题
  • 使用Inf 而不是-Inf
猜你喜欢
  • 1970-01-01
  • 2018-02-20
  • 2017-02-23
  • 2021-07-09
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 2021-11-09
  • 2018-11-01
相关资源
最近更新 更多