首页 > 解决方案 > 如何引用 R 中的所有其他列?

问题描述

我正在处理类似于以下数据的数据:

ID <- c("A", "B", "C", "D", "E")
x1 <- c(1,1,1,1,0)
x2 <- c(0,0,1,2,2)
x3 <- c(0,0,0,0,0)
x4 <- c(0,0,0,0,0)

df <- data.frame(ID, x1, x2, x3, x4)

看起来像:

> df
  ID x1 x2 x3 x4
1  A  1  0  0  0
2  B  1  0  0  0
3  C  1  1  0  0
4  D  1  2  0  0
5  E  0  2  0  0

我想创建一个新列,它是条件语句的乘积: if x1 == 1and all the other columns are equal to 0, then it is coded "Positive"

如何在写出条件语句中的其余列的情况下引用除 x1 之外的所有其他列?

标签: rbooleanconditional-statementsrecode

解决方案


基数 R:

df$new <- ifelse(df$x1==1 &                  ## check x1 condition
                 rowSums(df[,3:5]!=0)==0),   ## add the logical outcomes by row
                 "Positive",
                 "not_Positive"))

第二行有点棘手。

  • df[,3:5](或df[,-(1:2)])选择除前两列之外的所有列。你也可以subset(df,select=x2:x4)在这里使用(虽然?subset说“警告:这是一个旨在交互使用的便利功能......”)
  • !=0测试值是否为 0,返回TRUEFALSE
  • rowSums()将值相加(FALSE→0,TRUE→1)
  • 如果在转换为数字时该行中的所有逻辑值都为零,则行总和为零(→ 所有 FALSE → 无不等于零

如果可能有NA值,那么您将需要na.rm=TRUE在您的rowSums()规范中


推荐阅读