R中连续列的Vlookup/Match函数
我有一个2数据帧。 df1: 第二个数据, df2: 现在,我想在df1中对df2列应用vloook/match。我们在excel中也是这样做的。 如果存在精确匹配,请给我匹配,否则为0 我试着在R中创建函数 相配R中连续列的Vlookup/Match函数,r,match,vlookup,R,Match,Vlookup,我有一个2数据帧。 df1: 第二个数据, df2: 现在,我想在df1中对df2列应用vloook/match。我们在excel中也是这样做的。 如果存在精确匹配,请给我匹配,否则为0 我试着在R中创建函数 相配 for(i in names(df1)){ match_vector = match(df_final[,i], df$High, incomparables = NA) df1$High = df2$High[match_vector] } 但是有一个错误。它只显示最
for(i in names(df1)){
match_vector = match(df_final[,i], df$High, incomparables = NA)
df1$High = df2$High[match_vector]
}
但是有一个错误。它只显示最后一列,并替换其他列的值
对于vlookup:
func_vlook = function(a){
for(i in 1:ncol(a)) {
lookup_df = vlookup_df(lookup_value = i,
dict = df2,
lookup_column = 1)
}
return(lookup_df)
}
lookup_df <- func_vlook(a = df1)
对于N个列,应该有N个匹配的列
请帮助。无需使用此循环-
应用
和匹配
应该可以正常工作apply
将迭代您拥有的列数,因此输出的列数将与输入的列数相同。在您的示例中,apply
将简化以生成矩阵
apply(X = df1,
MARGIN = 2,
FUN = function(x) df2$High[match(x, df2$High)])
如果需要一个dataframe作为输出,那么将下面的代码包装为as.data.frame()
:谢谢你的帮助,没问题。如果答案是正确的,你能接受它,这样它就可以关闭了吗?
func_vlook = function(a){
for(i in 1:ncol(a)) {
lookup_df = vlookup_df(lookup_value = i,
dict = df2,
lookup_column = 1)
}
return(lookup_df)
}
lookup_df <- func_vlook(a = df1)
Dis1_SubDIs1_Village1_M1 Dis2_SubDIs1_Village1_M2 Dis1_SubDIs2_Village1_M3
NA NA NA
NA NA NA
BUNDI|HINDOLI|BUNDI NA NA
NA SIROHI||SIROHI SIROHI||SIROHI
NA NA NA
NA NA |BHARATPUR|SEEKRI
apply(X = df1,
MARGIN = 2,
FUN = function(x) df2$High[match(x, df2$High)])
as.data.frame(apply(X = df1,
MARGIN = 2,
FUN = function(x) df2$High[match(x, df2$High)]))