如何计算一列中每个值与R中另一列中每个值对应的频率?
我的数据集如下:如何计算一列中每个值与R中另一列中每个值对应的频率?,r,aggregate,R,Aggregate,我的数据集如下: col1 col2 A 1 A 2 A 2 B 1 B 1 C 1 C 1 C 2 我希望输出为: col1 col2 Frequency A 1 1 A 2 2 B 1 2 C 1 2 C 2 1 我尝试使用聚合函数和table函数,但无
col1 col2
A 1
A 2
A 2
B 1
B 1
C 1
C 1
C 2
我希望输出为:
col1 col2 Frequency
A 1 1
A 2 2
B 1 2
C 1 2
C 2 1
我尝试使用聚合函数和table函数,但无法获得理想的结果 您可以添加一个虚拟列,或使用
行名
对以下内容进行聚合:
aggregate(rownames(mydf) ~ ., mydf, length)
# col1 col2 rownames(mydf)
# 1 A 1 1
# 2 B 1 2
# 3 C 1 2
# 4 A 2 2
# 5 C 2 1
表
也可以正常工作,但会将数据中可能不存在的组合报告为“0”:
另一个不错的方法是使用“data.table”:
您可以添加虚拟列或使用
行名
对以下内容进行聚合:
aggregate(rownames(mydf) ~ ., mydf, length)
# col1 col2 rownames(mydf)
# 1 A 1 1
# 2 B 1 2
# 3 C 1 2
# 4 A 2 2
# 5 C 2 1
表
也可以正常工作,但会将数据中可能不存在的组合报告为“0”:
另一个不错的方法是使用“data.table”: 如果您的数据是
col1 <- c("A","A","A","B","B","C","C","C")
col2 <- c(1,2,2,1,1,1,1,2)
df <- data.frame(col1,col2)
如果您的数据是
col1 <- c("A","A","A","B","B","C","C","C")
col2 <- c(1,2,2,1,1,1,1,2)
df <- data.frame(col1,col2)
删除了我的答案,其中也使用了data.table,如果你在一篇帖子中把所有内容都整合到了一起:),我会使用setDT而不是as.data.table,并恰当地命名该列:
setDT(df)[,((“频率”=.N),by=(col1,col2)]
@grrgrrbla,谢谢你的评论,但是(1)我不喜欢使用setDT
修改其他人的数据,除非我知道他们知道这是怎么做的,(2)重命名列是一项相当标准的任务,在我看来对这里提出的问题并不重要。(我知道这是个人偏好的问题。)好的方面,我习惯于完美地为人们服务,但你是对的,他们的一点工作应该是可行的。。。你对setDT的观点也是可以理解的,因为如果人们不理解它的功能,它可能会导致bug,哈哈,我不确定这个网站是否应该“完美地为人们服务”(另一位新用户说)删除了我的答案,该答案也使用了数据,我会使用setDT而不是as.data.table,并恰当地命名该列:setDT(df)[,(“频率”=.N),by=.(col1,col2)]
@grrgrrbla,谢谢你的评论,但是(1)我不喜欢使用setDT
修改其他人的数据,除非我知道他们知道这是什么,以及(2)重命名专栏是一项相当标准的任务,在我看来,这对这里提出的问题并不重要。(我知道这是个人偏好的问题。)好的方面,我已经习惯于完美地为人们服务,但你是对的,他们的一点工作应该是可行的。。。你关于setDT的观点也是可以理解的,因为如果人们不理解它的功能,它可能会导致bug,哈哈,我不确定这个网站是否应该“完美地为人们服务”(另一个新用户说)为这个问题创建某种社区维基帖子不是很可取吗,既然这个问题经常出现?既然这个问题经常出现,难道不需要为它创建一些社区维基帖子吗?这可以缩短为:df%>%count(col1,col2)
这可以缩短为:df%>%count(col1,col2)
library(dplyr)
df %>% group_by(col1,col2) %>% summarize(frequency=n())
# output
col1 col2 frequency
1 A 1 1
2 A 2 2
3 B 1 2
4 C 1 2
5 C 2 1