R 使 `table` 命令与附加的 `amount` 列一起工作

R make `table` command work with additional `amount` column

我正在使用 R 和这样的数据

data <- data.frame(name=c("dog", "cat", "steak", "dog", "mouse", "cat"), amount=c(1, 2, 2.5, 1, 4, 1))

因此我的数据看起来像这样

> data
   name amount
1   dog    1.0
2   cat    2.0
3 steak    2.5
4   dog    1.0
5 mouse    4.0
6   cat    1.0

现在我想计算我有多少对象(dogcat 等)。通常我只会使用 table 函数。

> table(data$name)

  cat   dog mouse steak 
    2     2     1     1 

但是正如您想象的那样,我不只是想计算数据框中有多少条目。我想在 amount 列中计数。我想要这样的输出

> custom_table(data)

  cat   dog mouse steak 
  3.0   2.0   4.0   2.5 

有没有简单的方法来获得这种 table 功能?

也许使用 dyplr:

library(dyplr)

data %>% group_by(name) %>% tally(amount)

输出:

# A tibble: 4 x 2
  name      n
  <fct> <dbl>
1 cat     3  
2 dog     2  
3 mouse   4  
4 steak   2.5

table 给出频率计数,我们需要得到 'name'

分组的 sum
aggregate(amount ~ name, data, sum)
#   name amount
#1   cat    3.0
#2   dog    2.0
#3 mouse    4.0
#4 steak    2.5

或者如果我们需要一个命名的 vector

with(data, tapply(amount, name, FUN = sum))
#  cat   dog mouse steak 
#  3.0   2.0   4.0   2.5 

count 来自 dplyr

library(dplyr)
data  %>%
     count(name, wt = amount)