[英]subset in R based on factor level n-times given a vector of matching variables
R中的新手,我一直在嘗試尋找一種簡潔的方法(不使用循環)來執行以下操作:
x <- c(0, 4)
y <- c(1, 2)
df <- data.frame(x,y)
因此,如果我要輸出y = 1的所有x:
df$x[df$y == 1]
但是如果我有一個向量,例如<-c(1,1,1),該怎么辦?
我不能只是做:
df$x[df$y == a]
因為它只是一個子集:
[1] 0
但我希望輸出為向量c(0,0,0)
顯然,這不是解決問題的辦法,但是關於哪一個的任何線索呢?
謝謝!
我認為您所追求的是%in%
。 嘗試:
df$x[df$y %in% a]
我認為您正在尋找%in%
:
df$x[df$y %in% a]
%in%
返回TRUE在每個值df$y
時,它是 a
。
正確的方法是
df[df$y %in% a,]$x
要么
df[df$y %in% a,'x']
根據您的問題,期望的結果是向量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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.