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

时间:2014-08-15 10:31:54

标签: 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)

现在我想在数据中引入一个名为&#39; cat&#39;

的新变量 我想在猫的范围内分配&#39; a&#39;任何观察值的值,其中1出现在x或y o中。我想分配值&#39; b&#39;对于观察,其中1出现在z和p的两个/两个中。

2 个答案:

答案 0 :(得分:1)

c("b", "a")[(!!rowSums(data[,1:2])) +0 + (!!rowSums(data[,3:4])+1)]
#[1] "a" "a" "a" "b" "b" "b"
  • 假设我理解了这个条件,并且假设不存在任何交叉的情况,即xy之一或1的行都没有与具有z
  • p1相交
  • 作为第一步,我在rowSums列和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
    
  • 应用于z列和p列时相同但我添加了1

    (!!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")[!!rowSums..],则2值将替换为b1替换为a 1}}。

答案 1 :(得分:1)

如果xy为非零,则此行返回“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"))