如何引用R中的所有其他列?

问题描述

我正在使用与以下数据类似的数据:

ID <- c("A","B","C","D","E")
x1 <- c(1,1,0)
x2 <- c(0,2,2)
x3 <- c(0,0)
x4 <- c(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

我想创建一个新列,该列是条件语句的产物:如果x1 == 1all the other columns are equal to 0,则其编码为"Positive"

除了x1 没有,我如何引用其他所有列而不必写出条件语句中的其余列?

解决方法

基本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()

,

使用select,我们可以有多个选择。下一个是范围(:),在此示例中,选择的列是从'x2'到'x4'并按顺序排列。如果我们要基于某些模式进行选择,可以使用matches("^x[2-9]$")完成。

在下面的代码中,它在单个列'x1'上创建逻辑条件,其余列selectrowSums并与&合并,然后输出将通过case_when双向公式传递为lhs,替换值为~的rhs。默认情况下,所有不满足条件的其他元素均为NA

library(dplyr)
df %>%
    mutate(new = case_when(x1 == 1 &
           rowSums(select(.,x2:x4)!= 0) == 0~ 'Positive'))
# ID x1 x2 x3 x4      new
#1  A  1  0  0  0 Positive
#2  B  1  0  0  0 Positive
#3  C  1  1  0  0     <NA>
#4  D  1  2  0  0     <NA>
#5  E  0  2  0  0     <NA>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...