我有一个包含大量变量的数据框.我通过将一些旧变量加在一起来创建新变量.我用来做的代码是:
name_of_data_frame<- transform(name_of_data_frame, new_variable=var1+var2 +....)
Run Code Online (Sandbox Code Playgroud)
当变换在其中一个观察中遇到NA时,它会在新变量中返回"NA",即使它添加的某些其他变量不是NA.
例如,如果var1= 4,var2=3,var3=NA,然后用transform,如果我这样做var1+var2+var3会发出NA,而我想它给我7.
我不想NA在数据框中将s 重新编码为零,因为我可能需要NA稍后再参考s,所以不要将NAs与真实的观察混淆0.
任何有关如何以NA上述方式使用变换函数来处理R处理的帮助都会很棒(或者如果有其他函数可供使用,那也会很棒).
请注意,我并不只是总结彼此相邻的变量,我也经常划分变量,乘法,减法等.
And*_*rie 10
我的第一直觉是建议使用sum()从那以后你可以使用这个na.rm论点.但是,这不起作用,因为sum()将参数减少为单个标量值,而不是向量.
这意味着您需要编写一个parallel sum函数.我们称之为psum(),类似于基本R函数pmin()或pmax():
psum <- function(..., na.rm=FALSE) {
x <- list(...)
rowSums(matrix(unlist(x), ncol=length(x)), na.rm=na.rm)
}
Run Code Online (Sandbox Code Playgroud)
现在设置一些数据并用于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
Run Code Online (Sandbox Code Playgroud)
同样,你可以定义一个parallel product,或者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
Run Code Online (Sandbox Code Playgroud)
此示例pprod为您要执行的操作提供了一个通用模板:创建一个函数,用于apply()将输入矩阵汇总到所需的向量中.