gpt4 book ai didi

r - 汇总数据框以沿子集返回非 NA 值

转载 作者:行者123 更新时间:2023-12-01 03:31:20 24 4
gpt4 key购买 nike

希望有人能帮我出个招数。我在网上找到了类似的问题,但是我所看到的示例都没有完全满足我的要求或处理我的数据结构。

我需要沿着数据子集从数据框中删除 NA,并将剩余的 NA 值压缩到每个数据子集的行中。

例子:

#create example data
a <- c(1, 1, 1, 2, 2, 2) #this is the subsetting variable in the example
b <- c(NA, NA, "B", NA, NA, "C") #max 1 non-NA value for each subset
c <- c("A", NA, NA, "A", NA, NA)
d <- c(NA, NA, 1, NA, NA, NA) #some subsets for some columns have all NA values

dat <- as.data.frame(cbind(a, b, c, d))

> desired output
a b c d
1 B A 1
2 C A <NA>

经验法则:
1) 需要从每列中删除 NA 值
2)沿数据子集循环(上例中的“a”列)
3) 对于每个子集,所有列最多有 1 个非 NA 值,但某些列可能包含所有 NA 值

想法:
  • lapply 或 dplyr 可能有助于沿所有列循环
  • na.omit 可能有帮助,如果子集列包含所有条目
    可以忽略行(类似于 as.data.frame(lapply(dat.admin, na.omit)))。如果某些子集不返回任何非 NA 值,则将 lapply 输出返回到数据帧的问题
  • 如果将 x[which.min(is.na(x))] 费力地应用于每个单独的列
  • 可以有效地实现这一点

    感谢任何帮助将最后的部分放在一起!谢谢!

    最佳答案

    使用 dplyr::summarise_all 可以实现一种解决方案.数据需要是group_bya .

    library(dplyr)

    dat %>%
    group_by(a) %>%
    summarise_all(funs(.[which.min(is.na(.))]))
    # # A tibble: 2 x 4
    # a b c d
    # <fctr> <fctr> <fctr> <fctr>
    # 1 1 B A 1
    # 2 2 C A <NA>

    关于r - 汇总数据框以沿子集返回非 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49564969/

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