R 基于行值提取列

R 基于行值提取列,r,R,以下数据集: df <- read.table(text = " a b c X Y Z", header = T) 返回 a b 1 X Y 但是命令 df[, sapply (df[1, ], as.character) %in% c("Y")] 返回 [1] Y Levels: Y 而不是 b 1 Y 知道为什么吗?以及如何检索正确的列名(很可能是重复的),但要提供答案 您已经陷入了这样一个主要陷阱:当订阅使维度长度为1时,

以下数据集:

df <- read.table(text = "  a b c 
                 X Y Z", header = T)
返回

  a b
1 X Y
但是命令

df[, sapply (df[1, ], as.character) %in% c("Y")]
返回

[1] Y
Levels: Y
而不是

   b
1  Y

知道为什么吗?以及如何检索正确的列名(很可能是重复的),但要提供答案

您已经陷入了这样一个主要陷阱:当订阅使维度长度为1时,默认情况下会删除数组的维度。使用drop=FALSE进行订阅将覆盖默认值

因此,这将返回您期望的结果:

df[, sapply (df[1, ], as.character) %in% c("Y"), drop = FALSE]
在[.data.frame,即df[,sapply df[1,]中使用drop=FALSE,在%cY中使用.character%,drop=FALSE]相关,可能由@RomanLuštrikp回答的重复可能是
df[, sapply (df[1, ], as.character) %in% c("Y"), drop = FALSE]