不确定此处发生了什么。按照逻辑,我没有得到预期的输出:
ini1 <- c("aB", "cD", "dE", "sP", "sW","sV")
labels1 <- c("AB","CD", "DE", "SP","SW","SV")
refine_colnames <- data.frame(ini1,labels1)
col_name <- c("cD","sW","sV")
col_name_new <- as.character(refine_colnames[which(refine_colnames$ini1 == col_name), "labels1"])
col_name_new
[1] "SW" "SV"
预期输出是:
[1] "CD" "SW" "SV"
问题是,当您这样做时:
refine_colnames$ini1 == col_name
您正在要求R逐个元素比较这两个向量。但是col_name
比refine_colnames$ini1
短,因此R recycles col_name
。那么,有效的做法是:
c("aB", "cD", "dE", "sP", "sW","sV") == c("cD","sW","sV", "cD","sW","sV")
您将看到这两个向量仅在最后两个位置匹配,这就是为什么您获得输出"sW" "sV"
您想要的是对两个向量进行match
:
match(col_name, refine_colnames$ini1)
#> [1] 2 5 6
甚至更好
refine_colnames$labels1[match(col_name, refine_colnames$ini1)]
#> [1] "CD" "SW" "SV"