我正在做一些使用subset()
的子集,但在我的邏輯語句中使用%in%
命令時遇到了一些問題。R中使用%進行子集數據的條件使用%
考慮像
x11 x21 x12 x22
1 19 2000 32 2004
2 19 2000 20 2001
一個簡單的數據結構我想的一個子集,其中這是事實,x12
要麼等於x22-x21+x11
或等於x22-x21+x11+1
。*對於上面的例子,我想在第二行中,由於當且僅當x12
是20或21時,該邏輯陳述應評估爲TRUE
。對於這個簡單的設置,對我下面的作品:
> test1 <- data.frame(x11=c(19, 19), x21=c(2000, 2000), x12=c(32, 20), x22=c(2004, 2001))
> subset(test1, (x12 %in% c(x22-x21+x11, x22-x21+x11+1)))
x11 x21 x12 x22
2 19 2000 20 2001
,當我介紹其他行,就會出現問題。添加一行:
x11 x21 x12 x22
1 19 2000 32 2004
2 19 2000 20 2001
3 30 1998 32 2000
現在,我想子集這個,以便我得到第二和第三行。但是使用與上面相同的子集策略:
> test2 <- data.frame(x11=c(19, 19, 30), x21=c(2000, 2000, 1998), x12=c(32, 20, 32), x22=c(2004, 2001, 2000))
> subset(test2, (x12 %in% c(x22-x21+x11, x22-x21+x11+1)))
x11 x21 x12 x22
1 19 2000 32 2004
2 19 2000 20 2001
3 30 1998 32 2000
所以現在我得到了第一個例子中沒有得到的行。我的猜測是它與允許x12
的矢量相關,即c(x22-x21+x11, x22-x21+x11+1)
,但我不確定如何構建這個,以便暗示它是「按行」而不是所有行的一個矢量。
想法非常感謝!
* X11是個體在時間點X21年齡,和X 12是一個(可能不同的)個體的在時間點X22的年齡。我想要包含x21的年齡(x11)與x22的年齡(x12)在邏輯和物理上兼容的行的子集;在2000年,19歲的個人在2001年是19,20或21歲,這取決於生日(但是由於其他原因,我放棄了這個年齡相同的年齡的可能性)。因此,我們在2000年有19歲,在2004年有32歲的第一行對同一個人來說是不可能的。
'如果年齡差是possible' - 你的意思是檢查是否'x12'是*之間*'X22-X21 + x11'和'X22-X21 + X11 + 1'? – zx8754 2015-03-31 11:56:20
@ zx8754看起來我把這個句子的某些部分放在那裏,我編輯了我的文章,使它更有意義(我希望)。 – hejseb 2015-03-31 12:00:37