gpt4 book ai didi

r - 基于每列中的观察数的子集数据框

转载 作者:行者123 更新时间:2023-12-04 12:16:06 24 4
gpt4 key购买 nike

我有一个问题,你愿意帮助我吗?我试图提出解决方案,但我不知道如何解决。

请使用它重新创建我的数据框。

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

在每列有大于或等于 7 个观察值(计数)的情况下,切片数据框的方法是什么?因此,所需的输出如下所示(我们每列的观察 >= 7):

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 个观察(计数)”

colSums(!is.na(df1)) >= 7
# A1 A2 A3
# TRUE FALSE TRUE

最后,您需要使用此向量对数据进行子集化

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)

关于r - 基于每列中的观察数的子集数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com