假设我们的数据框 data
包含以下列名: A1, A2, A3
。我想检查是否有任何列 0
。而不是做以下事情:
if (data$A1 == 0 || data$A2 == 0 || data$A3 == 0)
{
print("TRUE")
}
有没有办法做这样的事情:
for (i in 1:3)
{
if (data$Ai == 0)
{
print("TRUE")
}
}
如何在变量名中使用索引?
答案 0 :(得分:1)
您不能使用$
语法的变量。最好只使用列名作为字符串(你可以做)将data.frame子集化,然后检查是否有0
any(data[, paste0("A", 1:3)]==0)
答案 1 :(得分:0)
我不清楚你是否只想知道列的任何元素是否等于0,列的每个元素是否等于0,或者你想要什么。也就是说,在我的例子/答案中,你可以改变函数参数来寻找你想要的东西。
我会使用apply函数,因为它比编写循环更简单快捷。第一个参数是您的数据帧,第二个参数是1表示行,2表示列(您想要的):
df <- data.frame(A=c(1,0,3),B=c(3,3,3),C=c(4,3,0)) # Replace with your data
# For if you just want to know if each column contains a 0
apply(df,2,FUN=function(x) max(x==0,na.rm=T))
# For if you just want to know how many 0s are in each column
apply(df,2,FUN=function(x) sum(x==0))
# For if you want to know if all entries in each column are 0
apply(df,2,FUN=function(x) all(x==0))
# etc.
这些将返回命名向量,您可以按名称查看每列的答案。
我希望这有帮助!