首页 > 解决方案 > 将 R 代码中的列范围概括为未知的列数

问题描述

我想以一种通用的方式运行这段代码。我的 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)))])))

任何解决方案将不胜感激,谢谢。

标签: rcalculated-columns

解决方案


那正是我所想。代码看起来不错,但对于某些数据框,它必须返回单列。这些被转换为向量。您可以做的是使用drop=FALSE来抑制这种行为。另外,在 isna Dataframe 上做子集。

试试这个

rowSums( (!is.na(df))[, c(grep("^TN_[0-9]+$", colnames(df))), drop=FALSE] )

推荐阅读