r - 在这种情况下如何使用 str_c 处理 NA

标签 r stringr

不久前我得到了关于这个问题的帮助: How to replace multiple values in a string depending on a list of keys

现在我需要考虑到某些键不能被“翻译”。所以在这种情况下,我希望 key1-4 应该转换为 code1-4。我希望它能够处理 key_code 翻译中没有的键。如果我添加键码中缺少的键(例如 keyx),在某个地方已经存在另一个有效键值,我可以过滤与 key_codes 连接时出现的 NA。但是,如果我有一个只有 keyx 值的 id,那么整行就会消失,我想保留它(例如,它可以显示为 NA)。关于如何解决这个问题有什么想法吗?

library(dplyr)
library(tidyr)
library(stringr)

values = tibble(id = 1:4, values = c("key1;keyx", "key3;key4;key1", "key2;key1", "keyx"))
key_code = tibble(key = c("key1", "key2", "key3", "key4"), code = c("code1", "code2", "code3", "code4"))

values %>% 
  separate_rows(values) %>% 
  left_join(key_code, by = c("values" = "key")) %>% 
  group_by(id) %>%
  filter(!is.na(code)) %>% 
  summarise(code = str_c(code, collapse=";"))

最佳答案

我们可以使用 if/else 条件来检查 if 'code' 中的所有元素都是 NA,然后返回 NAelse粘贴非 NA 元素

library(dplyr)
library(tidyr)
library(stringr)
values %>%
   separate_rows(values) %>% 
   left_join(key_code, by = c("values" = "key")) %>% 
   group_by(id) %>% 
   summarise(code = if(all(is.na(code))) NA_character_ else 
           str_c(str_replace_na(code, ""), collapse=";"), .groups = 'drop')

-输出

# A tibble: 4 x 2
#     id code             
#  <int> <chr>            
#1     1 code1;           
#2     2 code3;code4;code1
#3     3 code2;code1      
#4     4 <NA>           

关于r - 在这种情况下如何使用 str_c 处理 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65223735/

相关文章:

r - 在 R 中使用 Grep 查找具有自定义 "extended"边界的单词

r - 如何在R中绘制极坐标?

r - 使用 R-markdown 包含多个图形

正则表达式双列匹配 R

用字符串中的平均值替换范围

r - str_extract_all 返回一个列表,但我想要一个向量

r - 没有足够的明确预测来计算 roc 下的面积

R:如何在 XGBoost 中使用多个 GPU?

删除整个数据框中的句点/点

r - 从字符串中选择第n个字符