在任意数量的 data.frame 列上应用“或”函数并保留缺失

基梅纳

我定期在 R 中创建数据集,并且经常发现我需要将两个或多个二进制变量“或”放入一个新变量中,以指示是否有任何为 1、没有为 1 或全部丢失。简单地使用|并不能NA按照我想要的方式处理

因此,给定一个包含df三列的 data.frame

x = c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,NA,NA,NA,NA,NA,NA,NA,NA,NA)
y = c( 0, 0, 0, 1, 1, 1,NA,NA,NA, 0, 0, 0, 1, 1, 1,NA,NA,NA, 0, 0, 0, 1, 1, 1,NA,NA,NA)
z = c( 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA, 0, 1,NA)

df = data.frame(x,y,z)

我正在寻找的输出是:

myFunction(df)
 [1]  0  1  0  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0  1 NA

但是简单地使用|并不能像我正在寻找的那样处理 0,因为它优先考虑NA's over 0's:

as.numeric(df$x | df$y | df$z)
 [1]  0  1 NA  1  1  1 NA  1 NA  1  1  1  1  1  1  1  1  1 NA  1 NA  1  1  1 NA  1 NA

这是我想出的最佳解决方案:

myFunction <- function(...) {
  as.numeric(apply(data.frame(...),1,function(x) { ifelse(all(is.na(x)),NA,sum(x,na.rm = T)) }) > 0)
}
df$xyz = myFunction(df)
df$xyz
 [1]  0  1  0  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0  1 NA

是否有具有此功能的程序包或编写此程序的更好方法,以便我不必在所有脚本中复制粘贴这些乱七八糟的东西?我是不是想多了?

阿克伦

我们可以使用rowSums并转换为二进制

df$new_col <- +(rowSums(df, na.rm = TRUE) > 0) * NA^(!rowSums(!is.na(df)))

-输出

df$new_col
[1]  0  1  0  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0  1 NA

如果我们使用sum_from,也可以以紧凑的方式hablar

library(hablar)
+(apply(df, 1, sum_) > 0)
 [1]  0  1  0  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0  1 NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

应用在vector / data.frame列上返回data.frame / tibble并绑定结果的函数

如何在任意数量的空格上分割字符串,又如何保留所有空格?

在R中的data.frame列上循环

在任意行中的特定列上起作用的函数

将函数应用于data.frame中的每个元素并返回data.frame

如何在任意列上旋转?

R:拆分data.frame但保留类

将函数应用于 data.frame

在R中的整个data.frame上应用mgsub函数

按pandas Data Frame 进行子集/分组以计算均值并应用于缺失值

在data.frame列表中的特定data.frame列上的高效功能

Rmarkdown打印data.frame内部函数

将函数输出到 data.frame

r-通过NA数量延迟data.frame

如何计算data.frame中连续数字的数量?

data.table在每列上应用函数

从一维data.frame中删除行并将其保留为data.frame

用 Julia Data Frame 中的先前值替换缺失值

如何在R中填写data.frame的缺失值?

跨列填充data.frame中的缺失值

复制任意数量整数的函数

将计算应用于data.frame值,存储在新的data.frame中-R

如何拆分data.frame->将合并应用于子集->合并为data.frame

as.character()应用于data.frame的单个元素与data.frame的整个“行”时

应用生成 data.frames 列表(或单个 rbinded data.frame)的滚动函数

使用aggregate.data.frame函数汇总r data.frame中的数据

应用使用多列作为参数的函数,函数返回一个data.frame

清空 data.frame(仅保留列名/标题)

保留所有名称,从列表到data.frame