我有一个像这样的数据框:
x y z country
1 4 1 USA
3 1 1 Canada
0 1 1 Spain
0 2 3 USA
4 1 1 Canada
我需要选择在所有数据框中至少出现1000次国家的数据。例如,假设只有美国和加拿大符合该条件。问题是我有40多个国家/地区和500,000个案例,所以我无法逐案进行。
我想我需要一个“ for”循环来做,但是我不知道该怎么做。
答案 0 :(得分:0)
首先获取所需国家的名称。然后按这些名称子集。
tab <- table(df$country)
mycountries <- names(tab[tab > 1000])
df <- df[df$country %in% mycountries, ]
答案 1 :(得分:0)
使用data.table并假设您的数据框名为df
,我们可以创建一个名为count
的变量,该变量计算每个country
的行总数,然后将其子集为仅包含>1000
行的国家/地区:
library(data.table)
setDT(df)
df[ , count := .N, by=country]
df[count > 1000]
答案 2 :(得分:0)
使用dplyr
的一种可能的解决方案:
library(dplyr)
df %>%
group_by(country) %>%
summarise(count = n()) %>%
filter(count >= 1000) %>%
arrange(desc(count))