说我在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的两个/两个中。答案 0 :(得分: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
相交
作为第一步,我在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
值将替换为b
,1
替换为a
1}}。
答案 1 :(得分:1)
如果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"))