根据行中的单个值对列进行子集

时间:2019-02-09 08:13:18

标签: r

我想对第5行值具有P1值的列进行子集化。

我目前的做法如下:

test<- first_sheet[sapply(first_sheet[5,], FUN = function(x){x=="P1" })]

但是,它返回错误,指出选择了未定义的列。

但是逻辑向量

sapply(first_sheet[5,], FUN = function(x){x=="P1" })

返回布尔向量。

请问这是什么原因,或者我怎么能找出问题出在哪里?谢谢!

1 个答案:

答案 0 :(得分:2)

样本数据

df <- data.frame( a = 1:10, b = 11:20, c = 5)

#     a  b c
# 1   1 11 5
# 2   2 12 5
# 3   3 13 5
# 4   4 14 5
# 5   5 15 5
# 6   6 16 5
# 7   7 17 5
# 8   8 18 5
# 9   9 19 5
# 10 10 20 5

代码

P1 <- 5
df[ , c( df[5, ] == P1 ) ]

#     a c
# 1   1 5
# 2   2 5
# 3   3 5
# 4   4 5
# 5   5 5
# 6   6 5
# 7   7 5
# 8   8 5
# 9   9 5
# 10 10 5

说明

df[5, ] == P1返回TRUE / FALSE结果df的第5行,当value == P1时为TRUE
c( df[5, ] == P1 )将此结果放入逻辑矢量
df[ , c( df[5, ] == P1 ) ]通过此逻辑向量将df的列作为子集