我想对第5行值具有P1值的列进行子集化。
我目前的做法如下:
test<- first_sheet[sapply(first_sheet[5,], FUN = function(x){x=="P1" })]
但是,它返回错误,指出选择了未定义的列。
但是逻辑向量
sapply(first_sheet[5,], FUN = function(x){x=="P1" })
返回布尔向量。
请问这是什么原因,或者我怎么能找出问题出在哪里?谢谢!
答案 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
的列作为子集