2016-09-27 26 views
1

我知道有一種方法與基礎R或dplyr或類似的東西要做到這一點,但我實在不明白這一點...如何根據來自另一個data.frame的具有匹配索引的邏輯值從data.frame中刪除值?

我有data.frame,p,用數據:

 TRIAL PCRIT_15min_fishMO2 PCRIT_15min_segmented PCRIT_25bins_fishMO2 PCRIT_25bins_segmented 
3 Pcrit_3a    13.326    16.530    13.712      NA 
33 Pcrit_38    5.610    14.832    5.568     15.091 
50 Pcrit_59     NA     NA    4.421     3.129 

和邏輯data.frame,j,具有相同的尺寸:

 TRIAL PCRIT_15min_fishMO2 PCRIT_15min_segmented PCRIT_25bins_fishMO2 PCRIT_25bins_segmented 
3 Pcrit_3a    FALSE     FALSE    FALSE      NA 
33 Pcrit_38    FALSE     FALSE    FALSE     FALSE 
50 Pcrit_59     NA     NA     TRUE     TRUE 

我想從p爲其在j等效值是刪除值。我怎樣才能做到這一點?

我期望的結果是:

 TRIAL PCRIT_15min_fishMO2 PCRIT_15min_segmented PCRIT_25bins_fishMO2 PCRIT_25bins_segmented 
3 Pcrit_3a     NA     NA     NA      NA 
33 Pcrit_38     NA     NA     NA      NA 
50 Pcrit_59     NA     NA    4.421     3.129 

這裏是我的數據:

p = structure(list(TRIAL = c("Pcrit_3a", "Pcrit_38", "Pcrit_59"), 
PCRIT_15min_fishMO2 = c(13.326, 5.61, NA), PCRIT_15min_segmented = c(16.53, 
14.832, NA), PCRIT_25bins_fishMO2 = c(13.712, 5.568, 4.421 
), PCRIT_25bins_segmented = c(NA, 15.091, 3.129)), .Names = c("TRIAL", 
"PCRIT_15min_fishMO2", "PCRIT_15min_segmented", "PCRIT_25bins_fishMO2", 
"PCRIT_25bins_segmented"), row.names = c(3L, 33L, 50L), class = "data.frame") 

j = structure(list(TRIAL = c("Pcrit_3a", "Pcrit_38", "Pcrit_59"), 
PCRIT_15min_fishMO2 = c(FALSE, FALSE, NA), PCRIT_15min_segmented = c(FALSE, 
FALSE, NA), PCRIT_25bins_fishMO2 = c(FALSE, FALSE, TRUE), 
PCRIT_25bins_segmented = c(NA, FALSE, TRUE)), .Names = c("TRIAL", 
"PCRIT_15min_fishMO2", "PCRIT_15min_segmented", "PCRIT_25bins_fishMO2", 
"PCRIT_25bins_segmented"), row.names = c(3L, 33L, 50L), class = "data.frame") 
+0

我會去'is.na(P [-1])< - J [-1]'大概 –

回答

1

你的答案是

p[j == FALSE] <- NA 

我相信,雖然你的問題一定是在某些回答儘管在論壇上形成了一些其他地方。

乾杯

+0

謝謝!這就是我想的,但我找不到答案。 – CephBirk

+0

@CephBirk可能是。有時候小的會滑過網。^_ ^。 – Lune3414

0

或者你可以這樣做:

p[-1][!j[-1]] <- NA 
相關問題