如何在R中的频率表之后删除数据帧中的行

时间:2015-05-11 18:15:15

标签: r

我有3个数据框,我必须从中找到少于2个国家的大陆并删除这些国家/地区(行)。数据帧的结构类似于下面称为x的数据帧:

    row        Country   Continent   Ranking
    1        Kenya       Africa      17
    2        Gabon       Africa      23
    3        Spain       Europe      04
    4        Belgium     Europe      03
    5        China       Asia        10
    6        Nigeria     Africa      14
    7        Holland     Europe      01
    8        Italy       Europe      05
    9        Japan       Asia        06

首先,我想知道每个大洲每个国家的频率,所以我做了

    x2<-table(x$Continent)
    x2
    Africa Europe Asia
    3        4      2

然后我想确定少于2个国家的大陆

    x3 <- x2[x2 < 10]
    x3
    Asia
    2  

我现在的问题是如何删除这些国家/地区。对于上面的例子,它将是亚洲的两个国家,我希望我的最终数据集如下所示:

    row       Country   Continent   Ranking
    1        Kenya       Africa      17
    2        Gabon       Africa      23
    3        Spain       Europe      04
    4        Belgium     Europe      03
    5        Nigeria     Africa      14
    6        Holland     Europe      01
    7        Italy       Europe      05

少于2个国家/地区的大陆数量因数据框架而异,因此我需要一种可以适用于所有国家的通用方法。

2 个答案:

答案 0 :(得分:4)

尝试

 library(dplyr)
 x %>%
    group_by(Continent) %>% 
    filter(n()>2)
 #   row Country Continent Ranking
 #1   1   Kenya    Africa      17
 #2   2   Gabon    Africa      23
 #3   3   Spain    Europe      04
 #4   4 Belgium    Europe      03
 #5   6 Nigeria    Africa      14
 #6   7 Holland    Europe      01
 #7   8   Italy    Europe      05

或使用x2

 subset(x, Continent %in% names(x2)[x2>2])
 #    row Country Continent Ranking
 #1   1   Kenya    Africa      17
 #2   2   Gabon    Africa      23
 #3   3   Spain    Europe      04
 #4   4 Belgium    Europe      03
 #6   6 Nigeria    Africa      14
 #7   7 Holland    Europe      01
 #8   8   Italy    Europe      05

答案 1 :(得分:3)

“data.table”的一个非常简单的方法是:

Component

在基地R你可以尝试:

Control