[英]R filter | Filtering and grouping with condition
我已经坚持了一段时间,如果有人可以帮忙。 我有一个看起来像这样的数据集
Col1 Date Value
A 2019-01-01 NA
A 2019-01-02 4
A 2019-01-03 NA
B 2019-02-01 NA
B 2019-02-02 NA
B 2019-02-03 1
C 2019-03-01 NA
C 2019-03-02 NA
C 2019-03-03 NA
我想创建一个表,它为每个唯一的 A/B/C 给出在“值”列或第一行中具有值的行(如果没有(如 C 的情况)),即,结果输出应该看起来喜欢
Col1 Date Value
A 2019-01-02 4
B 2019-02-03 1
C 2019-03-01 NA
我们可以按 'Col1' 分组, slice
第一个非 NA 行,或者if
所有 'Value' 都是NA
,则返回第一行
library(dplyr)
df1 %>%
group_by(Col1) %>%
slice(if(all(is.na(Value))) 1 else which(!is.na(Value))[1])
-输出
# A tibble: 3 x 3
# Groups: Col1 [3]
# Col1 Date Value
# <chr> <chr> <int>
#1 A 2019-01-02 4
#2 B 2019-02-03 1
#3 C 2019-03-01 NA
或者另一种选择是先arrange
然后在第一行做slice
df1 %>%
group_by(Col1) %>%
arrange(is.na(Value), .by_group = TRUE) %>%
slice(1)
df1 <- structure(list(Col1 = c("A", "A", "A", "B", "B", "B", "C", "C",
"C"), Date = c("2019-01-01", "2019-01-02", "2019-01-03", "2019-02-01",
"2019-02-02", "2019-02-03", "2019-03-01", "2019-03-02", "2019-03-03"
), Value = c(NA, 4L, NA, NA, NA, 1L, NA, NA, NA)),
class = "data.frame", row.names = c(NA,
-9L))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.