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 use
na.省略
<代码>数据%>%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