gpt4 book ai didi

r 按条件和因子组的子集行

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

我有这个带有很多 NA 的 data.frame:

df <- data.frame(a = rep(letters[1:3], each = 3), 
b = c(NA, NA, NA, 1, NA, 3, NA, NA, 7))
df
> df
a b
1 a NA
2 a NA
3 a NA
4 b 1
5 b NA
6 b 3
7 c NA
8 c NA
9 c 7

我想对这个数据框进行子集化,以仅获取具有不少于两个值的因子组行,例如:
  a  b
1 b 1
2 b NA
3 b 3

我试过这个功能,但它不起作用:
subset(df, sum(!is.na(b)) < 1, by = a)

> [1] a b
<0 rows> (or 0-length row.names)

有什么建议吗? (欢迎其他软件包解决方案)

最佳答案

我们可以使用 data.table .将 'data.frame' 转换为 'data.table' ( setDT(df) ),按 'a' 分组,if sum的逻辑向量(即非 NA 元素 - !is.na(b))大于 1,然后对 Data.table 进行子集。

library(data.table)
setDT(df)[,if(sum(!is.na(b))>1) .SD , by = a]
# a b
#1: b 1
#2: b NA
#3: b 3

或使用 dplyr ,同理,按'a'分组后,我们 filter行。
library(dplyr)
df %>%
group_by(a) %>%
filter(sum(!is.na(b))>1)
# a b
# <fctr> <dbl>
#1 b 1
#2 b NA
#3 b 3

或在 base Rave
df[with(df, ave(b, a, FUN = function(x) sum(!is.na(x))>1)!=0),]

关于r 按条件和因子组的子集行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828941/

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