gpt4 book ai didi

r - 如何从数据框中删除少于 5 个观察值的个体

转载 作者:行者123 更新时间:2023-12-04 09:34:28 25 4
gpt4 key购买 nike

为了澄清这个问题,我将简要描述数据。
data.frame中的每一行是一个观察,列代表与该观察相关的变量,包括:观察到的个体、观察的时间、观察的位置等。我想排除/过滤观察少于 5 个的个体。

换句话说,如果个人 = x 的行少于 5 行,那么我想删除包含个人 x 的所有行并将结果重新分配给新的 data.frame .我知道一些使用类似 names == unique(df$individualname) 的蛮力技术。然后分别对这些名称进行子集化并应用 nrow确定是否将它们排除在外……但必须有更好的方法。任何帮助表示赞赏,我对 R 还是很陌生。

最佳答案

使用 group_by 的示例和 filter来自 dplyr包裹:

library(dplyr)
df <- data.frame(id=c(rep("a", 2), rep("b", 5), rep("c", 8)),
foo=runif(15))

> df
id foo
1 a 0.8717067
2 a 0.9086262
3 b 0.9962453
4 b 0.8980123
5 b 0.1535324
6 b 0.2802848
7 b 0.9366375
8 c 0.8109557
9 c 0.6945285
10 c 0.1012925
11 c 0.6822955
12 c 0.3757085
13 c 0.7348635
14 c 0.3026395
15 c 0.9707223

df %>% group_by(id) %>% filter(n()>= 5) %>% ungroup()
Source: local data frame [13 x 2]

id foo
(fctr) (dbl)
1 b 0.9962453
2 b 0.8980123
3 b 0.1535324
4 b 0.2802848
5 b 0.9366375
6 c 0.8109557
7 c 0.6945285
8 c 0.1012925
9 c 0.6822955
10 c 0.3757085
11 c 0.7348635
12 c 0.3026395
13 c 0.9707223

或以 R 为基础:
> df[df$id %in% names(which(table(df$id)>=5)), ]
id foo
3 b 0.9962453
4 b 0.8980123
5 b 0.1535324
6 b 0.2802848
7 b 0.9366375
8 c 0.8109557
9 c 0.6945285
10 c 0.1012925
11 c 0.6822955
12 c 0.3757085
13 c 0.7348635
14 c 0.3026395
15 c 0.9707223

仍在基础 R 中,使用 with是一种更优雅的方式来做同样的事情:
df[with(df, id %in% names(which(table(id)>=5))), ]

或者:
subset(df, with(df, id %in% names(which(table(id)>=5))))

关于r - 如何从数据框中删除少于 5 个观察值的个体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367854/

25 4 0