关于赏金
Ben Bolker的 paste2
-solution 产生 ""
当粘贴的字符串包含 NA
处于相同的位置。像这样,
> paste2(c("a","b", "c", NA), c("A","B", NA, NA))
[1] "a, A" "b, B" "c" ""
第四个元素是
""
而不是 NA
像这样,[1] "a, A" "b, B" "c" NA
我为任何能解决这个问题的人提供这个小赏金。
原始问题
我已经阅读了帮助页面
?paste
,但我不明白如何让 R 忽略 NA
s。我做以下,foo <- LETTERS[1:4]
foo[4] <- NA
foo
[1] "A" "B" "C" NA
paste(1:4, foo, sep = ", ")
并得到
[1] "1, A" "2, B" "3, C" "4, NA"
我想得到的,
[1] "1, A" "2, B" "3, C" "4"
我可以这样做,
sub(', NA$', '', paste(1:4, foo, sep = ", "))
[1] "1, A" "2, B" "3, C" "4"
但这似乎是绕道而行。
最佳答案
出于“true-NA”的目的:似乎最直接的方法就是修改 paste2
返回的值成为 NA
当值为 ""
paste3 <- function(...,sep=", ") {
L <- list(...)
L <- lapply(L,function(x) {x[is.na(x)] <- ""; x})
ret <-gsub(paste0("(^",sep,"|",sep,"$)"),"",
gsub(paste0(sep,sep),sep,
do.call(paste,c(L,list(sep=sep)))))
is.na(ret) <- ret==""
ret
}
val<- paste3(c("a","b", "c", NA), c("A","B", NA, NA))
val
#[1] "a, A" "b, B" "c" NA
关于r - 在 paste() 中抑制 NAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673894/