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)
显然这不是解决问题的方法,但有哪些线索可以解决?
谢谢!
答案 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
的每个值重复的次数与a
中df$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}}