【问题标题】:assigning categoical values to multiple variables in r将分类值分配给 r 中的多个变量
【发布时间】:2014-10-09 02:27:43
【问题描述】:

假设我有以下数据输入到 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)

现在我想在数据中引入一个名为“cat”的新变量

在 cat 中,我想将 'a' 值分配给任何出现在 x 中或 y o 中都出现 1 的观察值。我想将值“b”分配给 z 和 p 中的一个/两个出现 1 的观察值。

【问题讨论】:

    标签: r variable-assignment multiple-variable-return


    【解决方案1】:
    c("b", "a")[(!!rowSums(data[,1:2])) +0 + (!!rowSums(data[,3:4])+1)]
    #[1] "a" "a" "a" "b" "b" "b"
    
    • 假设我理解条件并且假设不会有任何相交的情况,即xy 中的一个或两个的行是1 没有与z 相交或p 具有 1
    • 作为第一步,我在xy 列上做了rowSums

      rowSums(data[,1:2])
      #[1] 2 1 1 0 0 0
      
    • 对上述结果的双重否定并添加0给出

      (!!rowSums(data[,1:2]))+0
       #[1] 1 1 1 0 0 0
      
    • 应用于列 zp 时相同,但我添加 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

    【讨论】:

    • 可以使用一些详细说明/解释。
    【解决方案2】:

    如果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"))
    

    【讨论】:

    • 如果我的数据扩展到三个变量,例如 g
    • 我不太确定我是否理解。也许您需要另一个“或”(竖线符号)?
    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多