根据R中的列值计算行的频率

时间:2015-01-16 22:45:49

标签: r

我知道这是一个非常简单的问题,但我还没有找到答案。

我有一个数据框,可以为您提供一个人的身份和他的爱好。由于一个人可能有很多爱好,因此id字段可以重复多行,每行都有不同的爱好。我一直试图打印出只有一个以上爱好的行。我能够使用表格获取频率。

  1. 但是,如果仅在频率大于1时才应用条件进行打印。

  2. 其次,有没有更好的方法可以在不使用表的情况下查找频率。

  3. 这是我在没有过滤器的情况下尝试使用频率大于一的

    > id=c(1,2,2,3,2,4,3,1)
    > hobby = c('play','swim','play','movies','golf','basketball','playstation','gameboy')
    > df = data.frame(id, hobby)
    > table(df$id)
    
    1 2 3 4 
    2 3 2 1 
    

2 个答案:

答案 0 :(得分:3)

尝试使用数据表,我发现它比使用table()函数更具可读性:

library(data.table)
id=c(1,2,2,3,2,4,3,1)
hobby = c('play','swim','play','movies',
          'golf','basketball','playstation','gameboy')
df = data.frame(id=id, hobby=hobby)
dt = as.data.table(df)
dt[,hobbies:=.N, by=id]

根据您的情况,您将得到:

> dt[hobbies >1,]
    id       hobby hobbies
1:  1        play       2
2:  2        swim       3
3:  2        play       3
4:  3      movies       2
5:  2        golf       3
6:  3 playstation       2
7:  1     gameboy       2

答案 1 :(得分:1)

此示例假设您尝试过滤df

id=c(1,2,2,3,2,4,3,1)
hobby = c('play','swim','play','movies','golf','basketball',
'playstation','gameboy')
df = data.frame(id, hobby)
table(df$id)

获取所有具有多个爱好的ID

tmp <- as.data.frame(table(df$id))
tmp <- tmp[tmp$Freq > 1,]

使用该信息 - 在df中选择他们的ID

df1 <- df[df$id  %in% tmp$Var1,]
df1