等价于';vlookup';对于多个列,是否在R中?
我有一个9801×3的参考表。 此表的前2列定义如下等价于';vlookup';对于多个列,是否在R中?,r,vlookup,R,Vlookup,我有一个9801×3的参考表。 此表的前2列定义如下 x1 = x2 = seq(0.01,0.99,0.01) x12 = data.matrix(expand.grid(x1,x2)) 第三列包含结果值 现在我有另一个n×3矩阵,其中第1列和第2列是上述矩阵“x12”的选定行,第3列将被填充。我想通过查找第一个表中第1列和第2列的相同组合来填写第2个表的第3列,并在第3列中找到值 如何执行此操作?您可以使用合并功能执行此操作: # Original data frame x1 = x2 =
x1 = x2 = seq(0.01,0.99,0.01)
x12 = data.matrix(expand.grid(x1,x2))
第三列包含结果值
现在我有另一个n×3矩阵,其中第1列和第2列是上述矩阵“x12”的选定行,第3列将被填充。我想通过查找第一个表中第1列和第2列的相同组合来填写第2个表的第3列,并在第3列中找到值
如何执行此操作?您可以使用
合并功能执行此操作:
# Original data frame
x1 = x2 = seq(0.01,0.99,0.01)
x12 = expand.grid(x1,x2)
# Add a fake "outcome"
x12$outcome = rnorm(nrow(x12))
# New data frame with 100 random rows and the first two columns of x12
x12new = x12[sample(1:nrow(x12), 100), c(1,2)]
# Merge the outcome values from x12 into x12new
x12new = merge(x12new, x12, by=c("Var1","Var2"), all.x=TRUE)
by
告诉merge
在比较两个数据帧时哪些列必须匹配all.x=TRUE
告诉merge
保留第一个数据帧中的所有行,在这种情况下,x12new
,即使它们在第二个数据帧中没有匹配项(这不是问题,但您通常希望确保合并时不会丢失任何行)
另一件需要注意的事情是,与Excel中的vlookup不同,merge
将增加新的合并数据框中的行数,如果有多行符合条件。例如,查看将df2
中的值合并到df1
中时会发生什么:
df1 = data.frame(x = c(1,2,3,4), z=c(10,20,30,40))
df2 = data.frame(x = c(1,1,1,2,3), y=c("a","b","c","a","c"))
merge(df1, df2, by="x", all.x=TRUE)
您可以使用merge
功能执行此操作:
# Original data frame
x1 = x2 = seq(0.01,0.99,0.01)
x12 = expand.grid(x1,x2)
# Add a fake "outcome"
x12$outcome = rnorm(nrow(x12))
# New data frame with 100 random rows and the first two columns of x12
x12new = x12[sample(1:nrow(x12), 100), c(1,2)]
# Merge the outcome values from x12 into x12new
x12new = merge(x12new, x12, by=c("Var1","Var2"), all.x=TRUE)
by
告诉merge
在比较两个数据帧时哪些列必须匹配all.x=TRUE
告诉merge
保留第一个数据帧中的所有行,在这种情况下,x12new
,即使它们在第二个数据帧中没有匹配项(这不是问题,但您通常希望确保合并时不会丢失任何行)
另一件需要注意的事情是,与Excel中的vlookup不同,merge
将增加新的合并数据框中的行数,如果有多行符合条件。例如,查看将df2
中的值合并到df1
中时会发生什么:
df1 = data.frame(x = c(1,2,3,4), z=c(10,20,30,40))
df2 = data.frame(x = c(1,1,1,2,3), y=c("a","b","c","a","c"))
merge(df1, df2, by="x", all.x=TRUE)