R:在数据帧中追加列,其频率计数基于两列

时间:2016-08-09 13:04:23

标签: r data-structures dplyr

我有一个像这样的数据集:

name  height 
John    188
John    190
Jack    182
Jack    174
Jack    174

我需要根据(名称)和(高度)追加一个频率计数的列,而不修改数据集的结构,例如:像这样:

name  height occurrence
John    188      1
John    190      1
Jack    182      1
Jack    174      2
Jack    174      2

有一个单行班吗?我环顾四周,但似乎没有找到答案。 谢谢

3 个答案:

答案 0 :(得分:2)

使用data.table你可以使用(感谢@David Arenburg进行改进)

require(data.table)
setDT(df1)[, occurrence := .N, by = .(name, height)]

我的原始答案(复制通过:=引用添加的数据)

require(data.table)
setDT(df1)[,rep(.N,.N),.(name, height)]

答案 1 :(得分:1)

您可以使用base R ave等功能

ave(1:nrow(df), paste(df$name, df$height), FUN = length)
# [1] 1 1 1 2 2

答案 2 :(得分:1)

您也可以使用dplyr

require(dplyr)
data %>% 
   group_by(name,height) %>% 
   mutate(new = n()) %>% 
   data.frame()