将类别值分配给r中的多个变量
假设我将以下数据输入到R中将类别值分配给r中的多个变量,r,variable-assignment,multiple-variable-return,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) x 假设我了解该条件,并且还假设不会有任何相交情况,即x,y的1行与z或p的1值相交 作为第一步,我对列x和y rowSums(data[,1:2]) #[1] 2 1 1 0 0 0 对上述结果进行双重否定,然后加
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)
x
- 假设我了解该条件,并且还假设不会有任何相交情况,即
x
,y
的1
行与z
或p
的1
值相交
- 作为第一步,我对列
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
(!!rowSums(data[,3:4]))+1
#[1] 1 1 1 2 2 2
- 当应用于列
z
和p
时,情况也是如此,但我添加了1
给出
(!!rowSums(data[,1:2]))+0
#[1] 1 1 1 0 0 0
(!!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”)[!!行和..]
,则2
值将替换为b
,而1
将替换为a
如果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我不太确定我是否理解,那么“ifelse”命令是如何工作的。也许您需要另一个“或”(垂直条符号)?