我想以通用方式运行此代码。在我的df中,从12到25的列中有TN类型变量。我想保留所有数据,并按新变量sumTN中的行计算TN类型变量的有效chr类型值的总和。在这些变量中缺少数据的地方,我没有NA。
df$sumTN <- as.vector(rowSums(!is.na(df[, c(12:25)])))
我想将这些代码用于其他数据集,其中TN类型变量(我希望按行将它们求和)可以位于不同范围的不同列中。
我尝试了两种不同的方法来获得此结果,但是在两种情况下,我都收到一条消息,即“'x'必须是至少二维的数组”。我知道为什么,但是我不知道该如何解决这个问题。这是我尝试过的代码:
firstcol = which(colnames(df)=="TN_1")
lastcol = which(colnames(df)=="TN_14")
df$sumTN <- as.vector(rowSums(!is.na(df[, c(firstcol:lastcol)])))
df$sumTN <- as.vector(rowSums(!is.na(df[, c(grep("^TN_[0-9]+$", colnames(df)))])))
任何解决方案将不胜感激,谢谢。
答案 0 :(得分:0)
这就是我的想法。该代码看起来不错,但对于某些数据框,它必须返回单个列。这些被转换为向量。您可以使用drop=FALSE
来抑制此行为。另外,在isna数据框上进行子设置。
尝试
rowSums( (!is.na(df))[, c(grep("^TN_[0-9]+$", colnames(df))), drop=FALSE] )
答案 1 :(得分:0)
最后,我找到了解决问题的方法。我必须使用library(dplyr),然后代码是:
df$sumTN <- as.vector(rowSums(!is.na(select_if(df, grepl("^TN_[0-9]+$", colnames(df))==T))))