我知道这是一个非常简单的问题,但我还没有找到答案。
我有一个数据框,可以为您提供一个人的身份和他的爱好。由于一个人可能有很多爱好,因此id字段可以重复多行,每行都有不同的爱好。我一直试图打印出只有一个以上爱好的行。我能够使用表格获取频率。
但是,如果仅在频率大于1时才应用条件进行打印。
其次,有没有更好的方法可以在不使用表的情况下查找频率。
这是我在没有过滤器的情况下尝试使用频率大于一的
> 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
答案 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