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

Posted

技术标签:

【中文标题】将分类值分配给 r 中的多个变量【英文标题】:assigning categoical values to multiple variables in 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 的观察值。

【问题讨论】:

【参考方案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 我不太确定我是否理解。也许您需要另一个“或”(竖线符号)?

以上是关于将分类值分配给 r 中的多个变量的主要内容,如果未能解决你的问题,请参考以下文章

无法将文件中的多个值分配给 json 请求

将函数的输出分配给R中的两个变量

将多个分类变量转换为R中的因子

核心数据 - 如何将核心数据中的属性值分配给变量

如何将字典值分配给 Python 中的变量?

从列表中提取值以将它们分配为 R 中的新变量