使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]

Posted

技术标签:

【中文标题】使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]【英文标题】:Concatenating strings / rows using dplyr, group_by & collapse or summarize, but maintain NA values [duplicate] 【发布时间】:2021-11-16 23:00:13 【问题描述】:

当使用 dplyr、group_by 和折叠或汇总连接字符串时,NA 值将变为字符串 "NA"。如何避免?

请参阅下面的示例:

ID <- c(1,1,2,3)
string <- c(' asfdas ', 'sdf', NA, 'NA')
df <- data.frame(ID, string)

两者,

df_conca <-df%>%
 group_by(ID)%>%
 summarize(string = paste(string, collapse = "; "))%>%
 distinct_all()

df_conca <-df%>%
 group_by(ID)%>%
 dplyr::mutate(string = paste(string, collapse = "; "))%>%
 distinct_all()

结果:

     ID string               
1     1 " asfdas ; sdf"
2     2 "NA"           
3     3 "NA" 

,但我想保留 NA 的值:

     ID string             
1     1 " asfdas ; sdf"
2     2 NA           
3     3 "NA" 

理想情况下,我希望留在 dplyr 工作流程中。

【问题讨论】:

【参考方案1】:

我们可以使用stringr 包中的str_c

library(dplyr)
library(stringr)

df %>%
  group_by(ID)%>%
  summarize(string = str_c(string, collapse = "; "))

#     ID string         
#  <dbl> <chr>          
#1     1 " asfdas ; sdf"
#2     2  NA            
#3     3 "NA"           

【讨论】:

?str_c 的一些相关部分:“每当缺失值与另一个字符串组合时,结果总是会缺失”; “缺少输入会导致缺少输出”。 (也许值得添加到帖子中?)。干杯 @Henrik:当然!我扩展了问题以涵盖这种可能性参见link!寻找解决方案。

以上是关于使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当我在`dplyr`之后加载`plyr`时,为啥汇总或变异不适用于group_by?

当我在`dplyr`之后加载`plyr`时,为啥汇总或变异不适用于group_by?

dplyr:在 group_by 之后汇总内部的管道

R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值中位数分位数IQRMADcountunique

自定义函数与dplyr变异或汇总因子中的不同级别?

在 R 中使用 dplyr 在 group_by 之后应用自定义函数