我正在尝试使用apply函数迭代数据框,如果数据框中的两列都大于或等于9,则输出TRUE。我的代码在下面显示我是如何尝试这样做的,以及示例输出。但是,当我查看输出时,所有输出值都是FALSE,即使它们应该为TRUE。
#Function to remove any proteins that have a certain number of NA values
RemoveNA <- function(input){
file <- read.table(input, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
numrows <- nrow(file)
#Set groups
Adj <- file[,3:12]
Non <- file[,13:22]
#Count the number of values that are not NA in each group
AdjSum <- rowSums(!is.na(Adj))
NonSum <- rowSums(!is.na(Non))
combined <- data.frame(AdjSum, NonSum)
d <- apply(combined, 1, function(x) x[1] >= 9 & x[2] >= 9)
d2<-is.data.frame(d)
newcombined <- data.frame(AdjSum, NonSum, d2)
print(head(newcombined))
}
输出:
AdjSum NonSum d2
1 10 10 FALSE
2 10 10 FALSE
3 10 10 FALSE
4 0 1 FALSE
5 1 1 FALSE
6 0 1 FALSE
这段代码有什么问题吗?
此代码的最终目标实际上是获取文件并根据存在的NA值确定要保留的行。
感谢您的帮助,
Allison G。
答案 0 :(得分:1)
或者
dat$d2 <- rowSums(dat>9)==ncol(dat)
dat <- structure(list(AdjSum = c(10L, 10L, 10L, 0L, 1L, 0L), NonSum = c(10L,
10L, 10L, 1L, 1L, 1L)), .Names = c("AdjSum", "NonSum"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))