gpt4 book ai didi

r - 使用变换函数添加变量,同时忽略 NA

转载 作者:行者123 更新时间:2023-12-01 21:44:08 24 4
gpt4 key购买 nike

我有一个包含大量变量的数据框。我通过将一些旧变量添加在一起来创建新变量。我用来执行此操作的代码是:

name_of_data_frame<- transform(name_of_data_frame, new_variable=var1+var2 +....)

当transform在其中一个观测值中遇到NA时,它会在新变量中返回“NA”,即使它添加的其他一些变量不是NA。

例如如果 var1= 4var2=3var3=NA,然后使用 transform,如果我这样做var1+var2+var3 它会给出 NA,而我希望它给出 7。

我不想在数据帧内将我的 NA 重新编码为零,因为我可能需要稍后再引用 NA,所以不要'不想将 NA 与真正的 0 观察结果混淆。

任何有关如何使用变换函数以上述方式绕过 R 处理 NA 的帮助都会很棒(或者如果有其他函数可供使用,那也很棒)。

请注意,我并不总是只是对彼此相邻的变量求和,我还经常对变量进行除法、乘法、减法等操作。

最佳答案

我的第一 react 是建议使用 sum(),因为这样您就可以使用 na.rm 参数。但是,这不起作用,因为 sum() 将其参数减少为单个标量值,而不是向量。

这意味着您需要编写一个并行求和函数。我们将此称为 psum(),类似于基本 R 函数 pmin()pmax():

psum <- function(..., na.rm=FALSE) { 
x <- list(...)
rowSums(matrix(unlist(x), ncol=length(x)), na.rm=na.rm)
}
<小时/>

现在设置一些数据并使用 psum() 获取所需的向量:

dat <- data.frame(
x = c(1,2,3, NA),
y = c(NA, 4, 5, NA))

transform(dat, new=psum(x, y, na.rm=TRUE))
x y new
1 1 NA 1
2 2 4 6
3 3 5 8
4 NA NA 0
<小时/>

同样,您可以定义一个并行产品,或pprod(),如下所示:

pprod <- function(..., na.rm=FALSE) { 
x <- list(...)
m <- matrix(unlist(x), ncol=length(x))
apply(m, 1, prod, na.rm=TRUE)
}

transform(dat, new=pprod(x, y, na.rm=TRUE))
x y new
1 1 NA 1
2 2 4 8
3 3 5 15
4 NA NA 1
<小时/>

这个 pprod 示例为您想要执行的操作提供了一个通用模板:创建一个使用 apply() 将输入矩阵汇总为所需向量的函数.

关于r - 使用变换函数添加变量,同时忽略 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12139431/

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