在r中高效地查找数据帧中不同行的列值计数

在r中高效地查找数据帧中不同行的列值计数,r,count,subset,memory-efficient,R,Count,Subset,Memory Efficient,假设我有一个数据帧,如下所示: id value 1 "hi" 1 "hi" 1 "hi again" 1 "hi again" 2 "hello" 2 "hi" 现在我想得到id列中每个不同值的每个值的计数。输出结果如下 id value Freq 1 "hi" 2 1 "hi again" 2 2 "hello" 1 2 "hi" 1 我尝试为每个不同的i

假设我有一个数据帧,如下所示:

id   value
1    "hi"
1    "hi"
1    "hi again"
1    "hi again"
2    "hello"
2    "hi"
现在我想得到id列中每个不同值的每个值的计数。输出结果如下

id    value       Freq
1     "hi"        2
1     "hi again"  2
2     "hello"     1
2     "hi"        1   

我尝试为每个不同的id拆分第一个数据帧,并使用value列上的table函数获取频率,稍后再追加id列。而且,我的内存中有很多数据帧。我只是想知道我是否可以在不占用大量数据帧的情况下实现上述数据帧,因为我有近500万行。

假设您的data.frame被称为df,使用data.table:

library(data.table)
setDT(df)[ , .(Freq = .N), by = .(id, value)]
使用dplyr:

libary(dplyr)
group_by(df, id, value) %>% summarise(Freq = n())
您应该从dplyr或data.table这两个包中选择一个,并真正彻底地学习它。从长远来看,您可能会同时使用这两种方法。但从一开始,真正理解它会对你有很大帮助。我几乎每次使用R时都使用这两种语言

dplyr对于初学者来说比较容易,所以我会读一篇关于它的文章。这将永远帮助你。还有一个很棒的视频教程,可以在数据科学的语法和图形下找到


我个人更喜欢data.table,因为它更快、更灵活。检查新的HTML渐晕图和PDF渐晕图。

as.data.frametableDF在两列上都使用表格。或者,使用data.table,这将证明更有效,如下所示。感谢@grrgrrbla的精彩解释和资源。我试过使用dplyr,但不知怎么的,我没有达到我需要的结果。很高兴它有帮助,请接受答案,如果它有帮助,请单击箭头并向上投票。顺便说一句,如果你在data.table上使用dplyr语法,这两种方法的运行速度是相同的。我刚在我的电脑上试过。DT%mutateFreq=n同时令人惊讶和奇怪,在这里我看到他提到这一点:其他答案也值得一读。