我的数据类似于以下内容:
Clone+static
我试图将列粘贴在一起并获得NA,如果给定观察的任何粘贴列中存在任何NA,例如:
a<-data.frame(pig=c(NA,"a","b","c",NA),cow=c(NA,"101","112","77",NA),chicken=c("Sep",NA,"Oct","Nov",NA),stringsAsFactors=FALSE)
print(a)
pig cow chicken
<NA> <NA> Sep
a 101 <NA>
b 112 Oct
c 77 Nov
<NA> <NA> <NA>
我使用了以下
pig cow chicken rooster
<NA> <NA> Sep <NA>
a 101 <NA> <NA>
b 112 Oct b-112-Oct
c 77 Nov c-77-Nov
<NA> <NA> <NA> <NA>
这会产生包含NA作为字符串一部分的字符串,这并不理想。我见过的文档没有明确解决这个问题,例如:suppress NAs in paste()有什么想法吗?谢谢!
答案 0 :(得分:2)
stringr::str_c
有&#34;传染性&#34; NA
Š
paste('a', 'b', NA)
#> [1] "a b NA"
stringr::str_c('a', 'b', NA)
#> [1] NA
答案 1 :(得分:1)
如果我们使用ifelse
套餐,您可以使用case_when
或tidyverse
方法。
library(dplyr)
a <- data.frame(
pig = c(NA, "a", "b", "c", NA),
cow = c(NA, "101", "112", "77", NA),
chicken = c("Sep", NA, "Oct", "Nov", NA),
stringsAsFactors = FALSE
)
a %>%
mutate(
rooster = case_when(
is.na(pig) | is.na(cow) | is.na(chicken) ~ NA_character_,
TRUE ~ paste(pig, cow, chicken, sep = "-")
)
)
# pig cow chicken rooster
# 1 <NA> <NA> Sep <NA>
# 2 a 101 <NA> <NA>
# 3 b 112 Oct b-112-Oct
# 4 c 77 Nov c-77-Nov
# 5 <NA> <NA> <NA> <NA>