最近,有人问我关于在R中设置数据框的问题。我的同事有这行代码
dd2 <- subset(dd, tret == c("T1", "T2", "T3", "T4"))
,产生子集的1/4。与标准dd2 <- subset(dd, tret == "T1" | tret == "T2" | tret == "T3" | tret == "T4")
产生960行的情况相反,第一行代码仅产生240行。
向量也发生了同样的事情。例如,
x <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
y <- x[x == 1 | x == 2] gives a vector different from
y <- x[x == c(1,2)]
对差异有何见解?谢谢。
答案 0 :(得分:1)
问题在于当我们使用vector
大于1的length
和另一个length
> 1的值时,值的回收。
x == 1:2
#[1] TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
其中
x
#[1] 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
并且比较按以下方式进行
rep(1:2, length.out = length(x))
#[1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
在上面的示例中,将1与x的第一个元素进行比较,将2与第2个元素进行比较,再与x的第3个元素进行比较,将2与第4个元素进行比较,并重复直到向量'x'的结尾。要比较长度大于1的向量,请使用%in%
identical(x[x == 1 | x == 2], x[x %in% 1:2])
#[1] TRUE