gpt4 book ai didi

r - cbind:有没有办法将缺失值设置为 NA?

转载 作者:行者123 更新时间:2023-12-03 22:20:24 27 4
gpt4 key购买 nike

如果我错过了这样一个简单问题的答案,请原谅我。

我想使用 cbind()绑定(bind)两列。其中之一是长度较短的单个条目。

我可以让 R 提供 NA对于缺失值?

该文档讨论了 deparse.level争论,但这似乎不是我的解决方案。

此外,如果我可能如此大胆,是否还有一种快速的方法可以在较短的列前加上 NA的?

最佳答案

不久前,我编写了一个名为 Cbind 的函数。那是为了做这种事情。在其当前形式下,它应该能够处理向量 data.frame s 和矩阵作为输入。

现在,函数在这里:https://gist.github.com/mrdwab/6789277

以下是如何使用该功能:

x <- 1:5
y <- letters[1:4]
z <- matrix(1:4, ncol = 2, dimnames = list(NULL, c("a", "b")))
Cbind(x, y, z)
# x y z_a z_b
# 1 1 a 1 3
# 2 2 b 2 4
# 3 3 c NA NA
# 4 4 d NA NA
# 5 5 <NA> NA NA
Cbind(x, y, z, first = FALSE)
# x y z_a z_b
# 1 1 <NA> NA NA
# 2 2 a NA NA
# 3 3 b NA NA
# 4 4 c 1 3
# 5 5 d 2 4

所需的两个三个函数是 padNA , dotnames , 和 Cbind ,其定义如下:
padNA <- function (mydata, rowsneeded, first = TRUE) {
## Pads vectors, data.frames, or matrices with NA
temp1 = colnames(mydata)
rowsneeded = rowsneeded - nrow(mydata)
temp2 = setNames(
data.frame(matrix(rep(NA, length(temp1) * rowsneeded),
ncol = length(temp1))), temp1)
if (isTRUE(first)) rbind(mydata, temp2)
else rbind(temp2, mydata)
}

dotnames <- function(...) {
## Gets the names of the objects passed through ...
vnames <- as.list(substitute(list(...)))[-1L]
vnames <- unlist(lapply(vnames,deparse), FALSE, FALSE)
vnames
}

Cbind <- function(..., first = TRUE) {
## cbinds vectors, data.frames, and matrices together
Names <- dotnames(...)
datalist <- setNames(list(...), Names)
nrows <- max(sapply(datalist, function(x)
ifelse(is.null(dim(x)), length(x), nrow(x))))
datalist <- lapply(seq_along(datalist), function(x) {
z <- datalist[[x]]
if (is.null(dim(z))) {
z <- setNames(data.frame(z), Names[x])
} else {
if (is.null(colnames(z))) {
colnames(z) <- paste(Names[x], sequence(ncol(z)), sep = "_")
} else {
colnames(z) <- paste(Names[x], colnames(z), sep = "_")
}
}
padNA(z, rowsneeded = nrows, first = first)
})
do.call(cbind, datalist)
}

我停止使用该功能的部分原因是 gdata包已经有一个名为 cbindX 的函数处理 cbind学习 data.frame s 和具有不同行数的矩阵。它不能直接作用于向量,因此您需要将它们转换为 data.frame首先。
library(gdata)
cbindX(data.frame(x), data.frame(y), z)
# x y a b
# 1 1 a 1 3
# 2 2 b 2 4
# 3 3 c NA NA
# 4 4 d NA NA
# 5 5 <NA> NA NA

关于r - cbind:有没有办法将缺失值设置为 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com