将类别值分配给r中的多个变量

将类别值分配给r中的多个变量,r,variable-assignment,multiple-variable-return,R,Variable Assignment,Multiple Variable Return,假设我将以下数据输入到R中 x <- c(1,1,0,0,0,0) y <- c(1,0,1,0,0,0) z <- c(0,0,0,0,1,1) p <- c(0,0,0,1,1,0) data <- data.frame(x,y,z,p) x 假设我了解该条件,并且还假设不会有任何相交情况,即x,y的1行与z或p的1值相交 作为第一步,我对列x和y rowSums(data[,1:2]) #[1] 2 1 1 0 0 0 对上述结果进行双重否定,然后加

假设我将以下数据输入到R中

x <- c(1,1,0,0,0,0)
y <- c(1,0,1,0,0,0)
z <- c(0,0,0,0,1,1)
p <- c(0,0,0,1,1,0)

data <- data.frame(x,y,z,p)
x
  • 假设我了解该条件,并且还假设不会有任何相交情况,即
    x
    y
    1
    行与
    z
    p
    1
    值相交
  • 作为第一步,我对列
    x
    y

    rowSums(data[,1:2])
    #[1] 2 1 1 0 0 0
    
  • 对上述结果进行双重否定,然后加上
    0

    (!!rowSums(data[,1:2]))+0
     #[1] 1 1 1 0 0 0
    
    (!!rowSums(data[,3:4]))+1
    #[1] 1 1 1 2 2 2
    
  • 当应用于列
    z
    p
    时,情况也是如此,但我添加了
    1
    给出

    (!!rowSums(data[,1:2]))+0
     #[1] 1 1 1 0 0 0
    
    (!!rowSums(data[,3:4]))+1
    #[1] 1 1 1 2 2 2
    
  • 如果将以上两个结果相加,将得到

    (!!rowSums(data[,1:2])) +0 + (!!rowSums(data[,3:4])+1)
     #[1] 2 2 2 1 1 1
    
  • 这可以用作数字索引,因此如果我使用
    c(“b”,“a”)[!!行和..]
    ,则
    2
    值将替换为
    b
    ,而
    1
    将替换为
    a

如果
x
y
非零,此行返回“a”,否则返回“b”

ifelse(data$x | data$y, "a", "b")
# [1] "a" "a" "a" "b" "b" "b"
如果需要处理四列均为零的情况,可以使用:

ifelse(data$x | data$y,
       "a",
       ifelse(data$z | data$p, "b", "neither a nor b"))

如果我的数据扩展到三个变量,以至于g我不太确定我是否理解,那么“ifelse”命令是如何工作的。也许您需要另一个“或”(垂直条符号)?