r - 将 NA 分配给列表中的值

标签 r

我有一个包含许多变量的数据框。这是我目前所拥有内容的简化版本:

n_20010_0_0 <- c(1,2,3,4)
n_20010_0_1 <- c(0, -2, NA, 4)  
n_20010_0_2 <- c(3, 0, -7, 2)

x <- data.frame (n_20010_0_0, n_20010_0_1, n_20010_0_2)

我创建了一个新变量,返回变量列表中是否有 1:

 MotherIllness0 <- paste("n_20010_0_", 0:2, sep = "")
 x$MotherCAD_0_0 <- apply(x, 1, function(x) as.integer(any(x[MotherIllness0] == 1, na.rm = TRUE)))

我想将 NA 保留为 0,但我也想重新编码它,以便如果有 -7,则新值是 NA。 这是我尝试过的方法,但它不起作用:

x$MotherCAD_0_0[MotherIllness0 == -7] <- NA

最佳答案

您不需要定义 MotherIllness0apply 函数中的参数 1 会处理它。

这里有一行代码可以完成您想要的两件事。

MotherIllness0 <- paste("n_20010_0_", 0:2, sep = "")    
x$MotherCAD_0_0<- apply(x[,MotherIllness0], 1, function(x) ifelse(any(x==-7), NA,    
                                                     as.integer(any(x==1, na.rm=T))))

我假设同时包含 1 和 -7 的行的新变量应为 NA。如果没有,那么这应该有效:

x$MotherCAD_0_0<- apply(x[,MotherIllness0], 1, function(x) ifelse(any(x==1, na.rm=T), 1,
                                                 ifelse(any(x==-7), NA, 0)))

请注意,对于上面的示例,这两行应该产生相同的结果。

关于r - 将 NA 分配给列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770241/

相关文章:

r - 有没有办法让 geoms 褪色但坚持 gganimate?

python 相当于 R 中的 get() (=使用字符串检索符号的值)

r - 如何使用 R 将日期时间格式转换为 'ddmmyyyy'?

R 文本连接 : "argument ' object' must deparse to a single character string"

r - 在满足 R 条件的列中添加某些行?

删除 roxygen 标签/部分

r - ggplot2如何支持循环绘图?

sql - 我可以在 R 脚本中优雅地包含格式化的 SQL 字符串吗?

r - 用户选择主题 R Shiny ggplot

数据框中的 R 向量值