【发布时间】:2017-03-23 17:57:06
【问题描述】:
考虑以下简单示例
group <-c('A','A','A','B','B','B','B')
names<- c(NA,'fred',NA,'josh','josh',NA,NA)
data=data_frame(group,names)
> data
# A tibble: 7 × 2
group names
<chr> <chr>
1 A <NA>
2 A fred
3 A <NA>
4 B josh
5 B josh
6 B <NA>
7 B <NA>
在这里,我想为每个group 获取names 中的第一个非缺失名称。我怎样才能做到这一点?以下使用coalesce 和first 的解决方案失败。
data %>% group_by(group) %>% mutate(first_non_missing = first(names),
first_non_missing_alt = coalesce(names)) %>% ungroup()
# A tibble: 7 × 4
group names first_non_missing first_non_missing_alt
<chr> <chr> <chr> <chr>
1 A <NA> <NA> <NA>
2 A fred <NA> fred
3 A <NA> <NA> <NA>
4 B josh josh josh
5 B josh josh josh
6 B <NA> josh <NA>
7 B <NA> josh <NA>
确实,对于A 组,first_non_missing 对于所有三个观察值都应该是 fred..
非常感谢!
【问题讨论】:
-
预期的结果是什么?找到的名称是否应该填充给定组中新变量中的所有值?
-
是的,它只是一个普通的变异。相同大小的原始数据框,以及一个新列,该列只为每个组重复
names中的第一个非缺失字符串 -
谢谢哥们,但有人比你快 :D
-
也许使用
na.omit?data %>% group_by(group) %>% summarise(first_non_missing = na.omit(names)[1])