首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带NA的连接字符串

不带NA的连接字符串
EN

Stack Overflow用户
提问于 2020-07-28 22:57:08
回答 3查看 578关注 0票数 0

我想总结一下没有na的字符串。

它正在使用str_c,如下面的示例所示

代码语言:javascript
复制
df <- tibble(x = c("ISSUE-1", "ISSUE-2", "ISSUE-3", "ISSUE-4"), ID = c("ID-1", "ID-1", "ID-2", "ID-2")) %>%
  group_by(ID) %>%
  summarise(IDissue = str_c(x, collapse = "; "))

输出

代码语言:javascript
复制
ID          issueID
ID-1    ISSUE-1; ISSUE-2
ID-2    ISSUE-3; ISSUE-4

但是,当列中有NA时,str_c将整个输出转换为NA,如文档:https://stringr.tidyverse.org/reference/str_c.html中所述。

和大多数其他R函数一样,缺少的值是“具有传染性的”:当一个缺失的值与另一个字符串组合时,结果总是会丢失的。使用str_replace_na()将NA转换为"NA“代码

代码语言:javascript
复制
df <- tibble(x = c("ISSUE-1", "ISSUE-2", "ISSUE-3", NA), ID = c("ID-1", "ID-1", "ID-2", "ID-2")) %>%
  group_by(ID) %>%
  summarise(IDissue = str_c(x, collapse = "; "))

输出

代码语言:javascript
复制
ID    IDissue
ID-1    ISSUE-1; ISSUE-2
ID-2    NA

有什么方法可以作为输出吗?

代码语言:javascript
复制
ID    IDissue
ID-1    ISSUE-1; ISSUE-2
ID-2    ISSUE-3
EN

回答 3

Stack Overflow用户

发布于 2020-07-28 23:00:57

更容易在filter之前添加group_by

代码语言:javascript
复制
library(stringr)
library(dplyr)
tibble(x = c("ISSUE-1", "ISSUE-2", "ISSUE-3", NA), 
     ID = c("ID-1", "ID-1", "ID-2", "ID-2")) %>%  
  filter(!is.na(x)) %>% 
  group_by(ID) %>%
  summarise(IDissue = str_c(x, collapse = "; "))
票数 2
EN

Stack Overflow用户

发布于 2020-07-28 23:04:16

基于aggregate的R基选项

代码语言:javascript
复制
> aggregate(.~ID,df,function(x) paste0(na.omit(x),collapse = "; "))
    ID                x
1 ID-1 ISSUE-1; ISSUE-2
2 ID-2          ISSUE-3
票数 1
EN

Stack Overflow用户

发布于 2020-07-28 23:12:26

您可以将粘贴或str_c与x!is.na(x)一起使用,而不是x;它可以工作。

代码语言:javascript
复制
library(dplyr)    
df <- tibble(x = c("ISSUE-1", "ISSUE-2", "ISSUE-3", NA), ID = c("ID-1", "ID-1", "ID- 
          2", "ID-2")) %>%
          group_by(ID) %>%
          summarise(IDissue = paste(x[!is.na(x)], collapse = "; "))
df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63143953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档