在这种情况下如何使用 str_c 处理 NA
How to handle NA with str_c in this case
我刚才在这个问题上得到了帮助:
现在我需要考虑到一些键不能被“翻译”。所以在这种情况下,我希望 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
,然后 return NA
或 else
到 paste
非 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>
我刚才在这个问题上得到了帮助:
现在我需要考虑到一些键不能被“翻译”。所以在这种情况下,我希望 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
,然后 return NA
或 else
到 paste
非 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>