Dplyr:如何按组查找第一个未丢失的字符串?
考虑下面的简单示例Dplyr:如何按组查找第一个未丢失的字符串?,r,dplyr,R,Dplyr,考虑下面的简单示例 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>
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>
事实上,对于组A
,first\u non\u missing
应该是fred
非常感谢 Summary将在此处为每组提供一个条目,使用
which
data %>%
group_by(group) %>%
summarise(first_non_missing = names[which(!is.na(names))[1]])
给予
第一组\u未\u缺失
1 A弗雷德
2 B乔希
如果仍然需要所有行,请将
摘要
替换为变异
预期结果是什么?找到的名称是否应该填充给定组中新变量中的所有值?是的,它只是一个常规的变异。相同大小的原始数据帧,以及一个新列,该列仅为每个组重复名称
中的第一个未丢失的字符串。谢谢好友,但有人比你快:DMaybe usena.省略
<代码>数据%>%group\U by(group)%%>%SUMMASE(first\U non\U missing=na.省略(名称)[1])是,这很有意义。谢谢除此之外,我不知道如果它在这里不起作用,coalesce
应该做什么……很高兴它能起作用。我认为,coalesce
设计用于跨列使用,而不是在列中使用。也就是说,如果您有三个name
列,它将返回第一个列,每一行都有一个非缺失值。它的实用程序实际上比您想象的要大。想象一下,在一个案例中,你有一个表单,允许受访者在他们的名字之外加上他们“首选”的名字。如果您要对它们进行寻址,则希望使用首选名称,但前提是该名称包含在内。因此,您可以创建一个列data%>%mutate(toAddress=coalesce(首选,第一个))
data %>%
group_by(group) %>%
summarise(first_non_missing = names[which(!is.na(names))[1]])
group first_non_missing
<chr> <chr>
1 A fred
2 B josh