r - 在 paste() 中抑制 NAs

标签 r paste na

关于赏金

Ben Bolkerpaste2 -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/

相关文章:

替换因子列中的 <NA>

r - 应用 scale() 后如何获取原始值?

r - 访问列表或数据帧元素时括号 [ ] 和双括号 [[ ]] 之间的区别

r - 使用 r 中的 dplyr 将函数应用于每个组的数据帧

linux - 将一列从一个表添加到另一个表的特定位置

javascript 剪切/复制/粘贴到剪贴板 : how did Google solve it?

r - na.approx 改变时区显示

html - 使用 htmlOutput 在 Shiny 的应用程序中将矢量渲染为逗号分隔的文本

r - 列中的连续NA

r - 如果所有值都是 NA,则计算总和或返回 NA 的有效方法