R 基于每列中的观察数的子集数据帧
我有一个问题,你能帮我一下吗。我试图想出解决办法,但我不知道如何解决 请使用此重新创建我的数据帧R 基于每列中的观察数的子集数据帧,r,dataframe,subset,R,Dataframe,Subset,我有一个问题,你能帮我一下吗。我试图想出解决办法,但我不知道如何解决 请使用此重新创建我的数据帧 structure(list(A1 = c(87L, 67L, 80L, 36L, 71L, 6L, 26L, 15L, 14L, 46L, 19L, 93L, 5L, 94L), A2 = c(50L, NA, 73L, 58L, 47L, 74L, 39L, NA, NA, NA, NA, NA, NA, NA), A3 = c(NA, 38L, 10L, 41L, NA, 66L, NA
structure(list(A1 = c(87L, 67L, 80L, 36L, 71L, 6L, 26L, 15L,
14L, 46L, 19L, 93L, 5L, 94L), A2 = c(50L, NA, 73L, 58L, 47L,
74L, 39L, NA, NA, NA, NA, NA, NA, NA), A3 = c(NA, 38L, 10L, 41L,
NA, 66L, NA, 7L, 29L, NA, 70L, 23L, 46L, 55L)), .Names = c("A1",
"A2", "A3"), class = "data.frame", row.names = c(NA, -14L))
我有这个数据帧:
A1 A2 A3
87 50 NA
67 NA 38
80 73 10
36 58 41
71 47 NA
6 74 66
26 39 NA
15 NA 7
14 NA 29
46 NA NA
19 NA 70
93 NA 23
5 NA 46
94 NA 55
A1 A3
87 NA
67 38
80 10
36 41
71 NA
6 66
26 NA
15 7
14 29
46 NA
19 70
93 23
5 46
94 55
如果每列有大于或等于7个观察值(计数),那么对数据帧进行切片的方法是什么?
因此,所需的输出如下所示(我们的obervation>=7/列):
A1 A2 A3
87 50 NA
67 NA 38
80 73 10
36 58 41
71 47 NA
6 74 66
26 39 NA
15 NA 7
14 NA 29
46 NA NA
19 NA 70
93 NA 23
5 NA 46
94 NA 55
A1 A3
87 NA
67 38
80 10
36 41
71 NA
6 66
26 NA
15 7
14 29
46 NA
19 70
93 23
5 46
94 55
我欢迎任何可以推广到更多专栏的解决方案。试试看
df1[, colSums(!is.na(df1)) >= 7]
# A1 A3
#1 87 NA
#2 67 38
#3 80 10
#4 36 41
#5 71 NA
#6 6 66
#7 26 NA
#8 15 7
#9 14 29
#10 46 NA
#11 19 70
#12 93 23
#13 5 46
#14 94 55
一步一步 您首先需要做的是找出哪些数据值没有丢失
!is.na(df1)
这将返回一个逻辑矩阵
# A1 A2 A3
# [1,] TRUE TRUE FALSE
# [2,] TRUE FALSE TRUE
# [3,] TRUE TRUE TRUE
# [4,] TRUE TRUE TRUE
# [5,] TRUE TRUE FALSE
# [6,] TRUE TRUE TRUE
# [7,] TRUE TRUE FALSE
# [8,] TRUE FALSE TRUE
# [9,] TRUE FALSE TRUE
#[10,] TRUE FALSE FALSE
#[11,] TRUE FALSE TRUE
#[12,] TRUE FALSE TRUE
#[13,] TRUE FALSE TRUE
#[14,] TRUE FALSE TRUE
使用colSums
找出每列中有多少个观察值没有丢失
colSums(!is.na(df1))
#A1 A2 A3
#14 6 10
应用您的条件“每列7个观察值(计数)大于或等于”
最后,您需要使用这个向量来子集数据
df1[, colSums(!is.na(df1)) >= 7]
如果你经常需要的话,把它变成一个函数
almost_complete_cols <- function(data, min_obs) {
data[, colSums(!is.na(data)) >= min_obs, drop = FALSE]
}
almost_complete_cols(df1, 7)
几乎完成\u cols=min\u obs,drop=FALSE]
}
几乎完成(df1,7)
读取?colSums
。如果您对此感到困惑,请使用dput
共享第一个数据帧。我没有收到您的评论。你什么意思?对不起,我没说清楚。您主要需要的函数是colSums
。使用dput
共享您的数据,请参阅我对我的问题进行了修改,以使其可复制。我不知道如何使用colSums
。你想分享一下吗?