在给定匹配变量的向量的情况下,基于因子水平n次的R中的子集

时间:2014-06-05 08:34:19

标签: r

R中的新手和我一直试图找到一个整洁的(不使用循环)方式来执行以下操作:

x <- c(0, 4)
y <- c(1, 2)
df <- data.frame(x,y)

因此,如果我想输出y = 1的所有x:

df$x[df$y == 1]

但如果我有一个像&lt; -c(1,1,1)?

这样的矢量怎么办?

我不能这样做:

df$x[df$y == a]

因为它只有一次子集:

[1] 0

但我希望输出为向量c(0,0,0)

显然这不是解决问题的方法,但有哪些线索可以解决?

谢谢!

4 个答案:

答案 0 :(得分:0)

我认为你所追求的是%in%。尝试:

df$x[df$y %in% a]

答案 1 :(得分:0)

我认为您正在寻找%in%

df$x[df$y %in% a]

%in%在<{em> df$y中的时,a中的每个值都会返回TRUE。

答案 2 :(得分:0)

正确的方法是

df[df$y %in% a,]$x

df[df$y %in% a,'x']

答案 3 :(得分:0)

根据您的问题,所需的结果是向量c(0,0,0)。你可以实现的一个方法是:

rep(df$x[df$y %in% a], length(a))
#[1] 0 0 0

但是您需要了解其含义,例如,如果您更改a以使其包含不同的数字。这是另一个例子:

a <- c(3,1,2)
rep(df$x[df$y %in% a], length(a))
#[1] 0 4 0 4 0 4

因此,在这种情况下,输出的长度为2*length(a),因为a的两个不同值与df$y中的条目匹配。从您的问题中不清楚在这种情况下您想要什么样的行为。以下是第三个示例,如果您希望a的每个值重复的次数与adf$y中也存在的a <- c(3,1,2) rep(df$x[df$y %in% a], length(a[a %in% df$y])) #[1] 0 4 0 4 中的元素数量一样频繁:

{{1}}