R: Подмножество кадра данных, основанное на группе и различных условиях - PullRequest
2 голосов
/ 17 апреля 2019

Рассмотрим фрейм данных:

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))

Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Вот решение 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
1 голос
/ 17 апреля 2019

Я не знаю, как поступить с 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, а | означает or.

...