使用 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?
R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值中位数分位数IQRMADcountunique