将分类值分配给 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"
假设我理解条件并且假设不会有任何相交的情况,即x
、y
中的一个或两个的行是1
没有与z
相交或p
具有 1
值
作为第一步,我在x
和y
列上做了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
应用于列 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
的值将被b
和1
替换为a
。
【讨论】:
可以使用一些详细说明/解释。【参考方案2】:如果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 我不太确定我是否理解。也许您需要另一个“或”(竖线符号)?以上是关于将分类值分配给 r 中的多个变量的主要内容,如果未能解决你的问题,请参考以下文章