几种SQL语言(我主要使用postgreSQL)有一个名为coalesce的函数,它返回每行的第一个非空列元素.当表中包含大量NULL元素时,这可以非常有效地使用.
我在R中的许多场景中都遇到过这种情况,当处理不太结构化的数据时,其中包含很多NA.
我自己做了一个天真的实现,但它的速度非常慢.
coalesce <- function(...) {
apply(cbind(...), 1, function(x) {
x[which(!is.na(x))[1]]
})
}
Run Code Online (Sandbox Code Playgroud)
a <- c(1, 2, NA, 4, NA)
b <- c(NA, NA, NA, 5, 6)
c <- c(7, 8, NA, 9, 10)
coalesce(a,b,c)
# [1] 1 2 NA 4 6
Run Code Online (Sandbox Code Playgroud)
coalesce在R中有没有有效的方法?
我在R中有一些列,每行只有一个值,其余的将是NA的.我想将这些组合成一个具有非NA值的列.有谁知道这样做的简单方法.例如,我可以如下:
data <- data.frame('a' = c('A','B','C','D','E'),
'x' = c(1,2,NA,NA,NA),
'y' = c(NA,NA,3,NA,NA),
'z' = c(NA,NA,NA,4,5))
Run Code Online (Sandbox Code Playgroud)
所以我会的
'a' 'x' 'y' 'z'
A 1 NA NA
B 2 NA NA
C NA 3 NA
D NA NA 4
E NA NA 5
Run Code Online (Sandbox Code Playgroud)
而且我会得到
'a' 'mycol'
A 1
B 2
C 3
D 4
E 5
Run Code Online (Sandbox Code Playgroud)
包含NA的列的名称根据查询中较早的代码而更改,因此我将无法显式调用列名,但是我将包含NA的列的列名称存储为向量,例如,在此示例中cols <- c('x','y','z'),所以可以调用列data[, cols].
任何帮助,将不胜感激.
谢谢
我有一个数据框,有两列"a"和"b",交替缺失值(NA)
a b
dog <NA>
mouse <NA>
<NA> cat
bird <NA>
Run Code Online (Sandbox Code Playgroud)
我想"合并"/将它们组合到一个看起来像这样的新列c,即NA每行中的非元素被选中:
c
dog
mouse
cat
bird
Run Code Online (Sandbox Code Playgroud)
我试过merge和join,但既不工作,因为我想要的.也许是因为我没有合并的id?对于整数,我只是绕过这个并添加两列,但在我的情况下如何?