索引的等同 – 在Excel中匹配返回大于查找值

在RI中需要执行一个类似的函数来在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 

在每个国家(数据集A)2009年的GNI水平上,我想知道哪个GNI2004只是大于或等于GNI2009,然后在该行返回相应的销售价值(s1,s2 …)(数据集B)。 我想在表A中为2009年的每个国家排列一次。

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

 GNI2004 s1 s2 s3 s4 2976 89 10 15 1 

在Excel中,我猜这会是像索引和匹配,匹配条件将match(look up value, look uparray,-1)

你可以尝试data.table的滚动连接,旨在实现这一点

 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每一行在GNI2009find最接近的相等/较大的值,得到行索引和子集。 然后我们更新DataA的结果。


在这里看到更多的信息。