r - 如何找到几列之间的差异
问题描述
我有这样的数据
df <- structure(list(X1 = c(37L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, NA,
11L, 12L), X2 = c(40L, NA, 35L, 35L, 35L, 34L, 29L, 28L, 28L,
NA, 25L, 24L), X3 = c(60L, 44L, 49L, 41L, NA, NA, NA, 25L, 26L,
NA, NA, 22L), T1 = c(19L, 55L, 47L, 46L, 36L, 42L, 25L, NA, 33L,
42L, 50L, 22L), T2 = c(75L, NA, 32L, 44L, 27L, 31L, 17L, NA,
18L, 45L, 10L, 11L), T3 = c(5L, 6L, 7L, 8L, 9L, 10L, 11L, NA,
46L, 36L, 42L, NA)), class = "data.frame", row.names = c(NA,
-12L))
我希望能够获得以下信息
Number_of_values_X1-X3 11
Number_of_missing_in_X1 1
Number_of_missing_in_X2 2
Number_of_missing_in_X3 5
Number_of_missing_in_X1X2X3 1
Number_of_Missing_in_X1_X2 0
Number_of_missing_in_X1_X3 0
Number_of_missing_in_X2_X3 0
其他三列相同
Number_of_values _T1-T3 11
Number_of_missing_in_T1 1
Number_of_missing_in_T2 2
Number_of_missing_in_T3 2
Number_of_missing_in_X1X2X3 1
Number_of_Missing_in_X1_X2 0
Number_of_missing_in_X1_X3 0
Number_of_missing_in_X2_X3 0
我尝试使用以下函数执行此操作,但是当涉及更多列时,我无法弄清楚如何修改它
myData <- function(Ecol) {
N_V <- length(setdiff(df[[column]], NA))
N_Missing <- sum(is.na(df[[column]]))
print(paste("Number of values in", column, N_V))
print(paste("Number of missing in", column, N_Missing))
}
解决方案
NA
下面将给出每列的值总数和NA
选定列的每行值的数量。
首先定义一个函数并计算一个逻辑矩阵。
na_cols <- function(X, cols){
all_na <- apply(X[, cols], 1, function(y) Reduce('&', y))
sum(all_na)
}
na <- sapply(df, is.na)
NA
现在是每列的值总数。
apply(na[, 1:3], 2, sum)
#X1 X2 X3
# 1 2 5
以及NA
每个列组合的值数。
na_cols(na, 1:3)
#[1] 1
na_cols(na, 1:2)
#[1] 1
na_cols(na, c(1, 3))
#[1] 1
na_cols(na, 2:3)
#[1] 1
对于以 开头的列T
,等效代码为
apply(na[, 4:6], 2, sum)
na_cols(na, 4:6)
na_cols(na, 4:5)
na_cols(na, c(4, 6))
na_cols(na, 5:6)
推荐阅读
- winforms - 当我关闭另一个 MDIChildForm 时激活了错误的 MDIChildForm
- android - 如果由 VS Code 运行,Flutter 运行会卡在“Installing build\...\app.apk”
- ruby-on-rails - 当 Rails 设置时,什么可能导致 SameSite cookie 在 AWS 中被覆盖?
- javascript - 在 Typescript 的泛型类中,如何返回 typeof T
- excel - Excel Worksheet_Change 未检测到更改
- playframework - Play Framework 无法反序列化从 Mongo 读取的 JSON
- amazon-web-services - 从前端为未经身份验证的用户查询 API 网关 (Lambda) 的最佳实践
- flutter - 如何将当前状态用户 ID 分配给数据库引用,然后将数据库引用分配给未来的构建器?
- c++ - 使用 RAII 简化将对象传递给其他对象而无需复制
- python - Pandas DataFrame.assign() 不适用于多列