根据行值提取列

时间:2016-04-08 13:53:12

标签: r

以下数据集:

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

命令

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

返回

  a b
1 X Y

但命令

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

返回

[1] Y
Levels: Y

而不是

   b
1  Y

知道为什么吗?以及如何检索正确的列名称

1 个答案:

答案 0 :(得分:2)

可能重复......但要提供答案......

您已陷入R Inferno; 8.1.44的主要陷阱之一&#34;默认情况下,当下标使维度长度为1时,将删除数组维度。使用drop = FALSE进行订阅会覆盖默认值&#34;

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

df[, sapply (df[1, ], as.character) %in% c("Y"), drop = FALSE]