Select 行按多个条件和列

Select rows by multiple conditions and columns

我有不同组的大型数据框:

df <- data.frame(
  Week=c("Week1", "Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1"),
  Day = c("Monday", "Monday", "Monday", "Tuesday", "Tuesday", "Tuesday", "Wednesday", "Wednesday",
          "Wednesday", "Thursday", "Thursday", "Thursday"),
  Type=c("A", "B", "C", "A", "B", "C", "A", "B", "C","A", "B", "C" ),
  Result=c("YES", "YES", "NO", "NO", "NO", "NO", "YES", "NO", "NO","YES", "YES", "NO")

df

我想添加另一列,指示工作日的 "YES" 类型 "A" 和 "B" 的结果为 "YES",就像这样:

df2 <- data.frame(
  Week=c("Week1", "Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1"),
  Day = c("Monday", "Monday", "Monday", "Tuesday", "Tuesday", "Tuesday", "Wednesday", "Wednesday",
          "Wednesday", "Thursday", "Thursday", "Thursday"),
  Type=c("A", "B", "C", "A", "B", "C", "A", "B", "C","A", "B", "C" ),
  Result=c("YES", "YES", "NO", "NO", "NO", "NO", "YES", "NO", "NO","YES", "YES", "NO"),
  Result.AB=c("YES", "YES", "YES", "NO", "NO", "NO", "NO", "NO", "NO","YES", "YES", "YES")

  )

df2 有人可以帮我吗?谢谢=)

这是一个使用 tidyverse 的解决方案。

library(tidyverse)

df <- data.frame(
  Week=c("Week1", "Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1","Week1"),
  Day = c("Monday", "Monday", "Monday", "Tuesday", "Tuesday", "Tuesday", "Wednesday", "Wednesday",
          "Wednesday", "Thursday", "Thursday", "Thursday"),
  Type=c("A", "B", "C", "A", "B", "C", "A", "B", "C","A", "B", "C" ),
  Result=c("YES", "YES", "NO", "NO", "NO", "NO", "YES", "NO", "NO","YES", "YES", "NO")
)

df2 <- df %>%
  mutate(Day = factor(Day, levels = c('Monday', 'Tuesday', 'Wednesday', 'Thursday'))) %>%
  spread(key = Type, value = Result) %>%
  mutate(Result.AB = ifelse(A == 'YES' & B == 'YES', 'YES', 'NO')) %>%
  gather(key = Type, value = Result, -c(Week, Day, Result.AB)) %>%
  arrange(Day, Type) %>%
  select(Week, Day, Type, Result, Result.AB)

df2
#>     Week       Day Type Result Result.AB
#> 1  Week1    Monday    A    YES       YES
#> 2  Week1    Monday    B    YES       YES
#> 3  Week1    Monday    C     NO       YES
#> 4  Week1   Tuesday    A     NO        NO
#> 5  Week1   Tuesday    B     NO        NO
#> 6  Week1   Tuesday    C     NO        NO
#> 7  Week1 Wednesday    A    YES        NO
#> 8  Week1 Wednesday    B     NO        NO
#> 9  Week1 Wednesday    C     NO        NO
#> 10 Week1  Thursday    A    YES       YES
#> 11 Week1  Thursday    B    YES       YES
#> 12 Week1  Thursday    C     NO       YES

我已经使用 spread to get one row per day, mutate to compute the new Result.AB variable then gather 再次拆分观察结果。管道的其余部分使行按正确的顺序排列。