使用 dplyr 计算值在列中出现的次数

我在 R 中有一个数据框 x

ID Name Code
1  John aa1
1  Sue  aa2
1  Mike aa2
1  Karl aa3
1  Lucy aa1

我想在这个数据框中添加一个额外的列,计算每个 Code 值出现的次数:

ID Name Code Code_frequency
1  John aa1  1
1  Sue  aa2  2
1  Mike aa2  2
1  Karl aa3  1
1  Lucy aa4  1

我尝试使用 mutatecount 的各种组合,但我收到错误消息说我使用了错误的数据类型: no applicable method for 'count' applied to an object of class "character"

我还看到 dplyr 具有 summarise 功能,但我需要保留数据框的布局,因为这将从 R 导出,因为需要手动检查每一行。

有没有办法在 R 中做到这一点? dplyr 解决方案很容易融入我拥有的其余代码,但我也欢迎其他库的建议。

stack overflow Count the number of times a value appears in a column using dplyr
原文答案
author avatar

接受的答案

使用 n() 函数:

x %>%
  group_by(Code) %>%
  mutate(Code_frequency = n()) %>%
  ungroup()

答案:

作者头像

使用 dplyr 可能是一个更简单的解决方案

library(dplyr)
df <- data.frame(ID=rep(1,5), Name=c('John', 'Sue', 'Mike',"Karl",'Lucy'), Code=c('aa1', 'aa2','aa2','aa3','aa4'))
df
#   ID Name Code
# 1  1 John  aa1
# 2  1  Sue  aa2
# 3  1 Mike  aa2
# 4  1 Karl  aa3
# 5  1 Lucy  aa4

# for getting the frequency in a new column
df %>% add_count(Code, sort = FALSE, name= "Code_frequency")
#   ID Name Code Code_frequency
# 1  1 John  aa1              1
# 2  1  Sue  aa2              2
# 3  1 Mike  aa2              2
# 4  1 Karl  aa3              1
# 5  1 Lucy  aa4              1

# for just getting the frequency distribution
df %>% count(Code, sort = TRUE, name= "Code_frequency")
#   Code Code_frequency
# 1  aa2              2
# 2  aa1              1
# 3  aa3              1
# 4  aa4              1