如何在R中向数据框中添加计数列(附实例)

227 阅读2分钟

你可以使用下面的基本语法在R语言的数据框中添加一个 "计数 "列:

df %>%
  group_by(var1) %>%
  mutate(var1_count = n())

这种特殊的语法在数据框中添加了一个名为var1_count的列,其中包含了名为var1的列中数值的计数。

下面的例子展示了如何在实践中使用这种语法。

例子:在R中添加计数列

假设我们在R中拥有以下数据框,其中包含各种篮球运动员的信息:

#define data frama
df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 position=c('G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'),
                 points=c(18, 22, 19, 14, 14, 11, 20, 28))

#view data frame
df

  team position points
1    A        G     18
2    A        F     22
3    A        F     19
4    B        F     14
5    B        G     14
6    B        G     11
7    B        F     20
8    B        F     28

我们可以使用下面的代码来添加一个名为team_count的列,其中包含每个球队的计数:

library(dplyr)

#add column that shows total count of each team
df %>%
  group_by(team) %>%
  mutate(team_count = n())

# A tibble: 8 x 4
# Groups:   team [2]
  team  position points team_count
              
1 A     G            18          3
2 A     F            22          3
3 A     F            19          3
4 B     F            14          5
5 B     G            14          5
6 B     G            11          5
7 B     F            20          5
8 B     F            28          5

3行的球队值为A,有5行的球队值为B。

因此:

  • 对于团队等于A的每一行,team_count列的值是3
  • 对于每一行的球队等于B,team_count列中的值是5

你也可以添加一个 "计数 "列,按多个变量分组。

例如,下面的代码显示了如何添加一个按球队位置变量分组的 "计数 "列:

library(dplyr)

#add column that shows total count of each team and position
df %>%
  group_by(team, position) %>%
  mutate(team_pos_count = n())

# A tibble: 8 x 4
# Groups:   team, position [4]
  team  position points team_pos_count
                  
1 A     G            18              1
2 A     F            22              2
3 A     F            19              2
4 B     F            14              3
5 B     G            14              2
6 B     G            11              2
7 B     F            20              3
8 B     F            28              3

从输出中我们可以看到:

  • 1行在球队列中包含A,在位置列中包含G。
  • 2行在球队列中包含A,在位置列中包含F。
  • 3行在球队列中包含B,在位置列中包含F。
  • 2行在团队列中包含B,在位置列中包含F。