[英]R: Subset a dataframe based on group and different conditions
考慮一個數據幀:
data = data.frame(a=c(1,1,1,2,2,3),
b=c("apples", "oranges", "apples", "apples", "apples", "oranges"),
c=c(12, 22, 22, 45, 67, 28),
d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"),
out = c(12, 14, 16, 18, 20, 22),
rate = c(-0.01, -0.02, 0.03, -0.04, 0.07, 0.06))
我想對數據幀進行子集化,以在水果為蘋果時為負時保持值,而在水果為橙色時為正時保持值。 即我想要的輸出是
data = data.frame(a=c(1,2,3),
b=c("apples", "apples", "oranges"),
c=c(12, 45, 28),
d=c("Monday", "Tuesday", "Tuesday"),
out = c(12, 18, 22),
rate = c(-0.01, -0.04, 0.06))
有辦法嗎?
這是dplyr
解決方案:
library(dplyr)
data %>%
filter((b == "apples" & rate < 0) | (b == "oranges" & rate > 0))
a b c d out rate
1 1 apples 12 Monday 12 -0.01
2 2 apples 45 Tuesday 18 -0.04
3 3 oranges 28 Tuesday 22 0.06
我不知道如何處理dplyr
。 但是,您可以使用subset
輕松地執行此操作
data = data.frame(a=c(1,1,1,2,2,3),
b=c("apples", "oranges", "apples", "apples", "apples", "oranges"),
c=c(12, 22, 22, 45, 67, 28),
d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"),
out = c(12, 14, 16, 18, 20, 22),
rate = c(-0.01, -0.02, 0.03, -0.04, 0.07, 0.06))
subData <- subset(data, (b == "apples" & rate < 0) | (b == "oranges" & rate > 0))
代碼很簡單。 它對尋找您的兩個約束的data
進行了子集化。 在此代碼中, &
代表and
while |
代表or
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.