好像where子句有个错误

问题描述 投票:0回答:1

不确定此处发生了什么。按照逻辑,我没有得到预期的输出:

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"
r
1个回答
1
投票

问题是,当您这样做时:

refine_colnames$ini1 == col_name

您正在要求R逐个元素比较这两个向量。但是col_namerefine_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"
© www.soinside.com 2019 - 2024. All rights reserved.