基于大型data.frame生成观测值存在/缺失矩阵的R技术需求
生成观测值存在/缺失的二进制矩阵
首先,先加载你提供的示例数据:
data <- structure(list(ID = 1:5, area = c(6L, 6L, 6L, 6L, 6L), ERC = c(1L, 1L, 1L, 1L, 1L), a = c(33, 34, 35, 38, 39), b = c(38, 41, 45, 8, NA), c = c(53, 35, 38, 39, 53), d = c(32, 33, 65, 36, 34)), .Names = c("ID", "area", "ERC", "a", "b", "c", "d"), row.names = c(NA, -5L), class = "data.frame")
接下来,我们可以用基础R快速生成你需要的存在/缺失矩阵——核心思路是判断每个单元格是否为NA,然后将非缺失值标记为1,缺失值标记为0:
# 生成存在/缺失矩阵(1代表观测值存在,0代表缺失) result <- as.data.frame(+!is.na(data)) # 查看结果 print(result)
运行后你会得到这样的输出:
ID area ERC a b c d 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 5 1 1 1 1 0 1 1
如果你习惯用tidyverse工具集,也可以用dplyr来实现:
library(dplyr) result <- data %>% mutate(across(everything(), ~ as.integer(!is.na(.x))))
补充说明
- 上面的代码会处理数据框中的所有列,如果你只想针对特定列(比如
a、b、c、d)生成缺失状态矩阵,可以修改代码:# 仅处理指定列 result <- data %>% mutate(across(c(a, b, c, d), ~ as.integer(!is.na(.x)))) - 最终的
result就是你需要的观测值存在/缺失矩阵,你可以用dput(result)导出它的结构,和你预期的格式一致。
内容的提问来源于stack exchange,提问作者Floni
相关产品推荐
相关产品推荐

