Команда R make `table` работает с дополнительным столбцом - PullRequest
1 голос
/ 26 марта 2020

Я работаю с 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

Теперь я хочу посчитать, сколько объекты, которые у меня есть (dog s, cat s, et c). Обычно я бы просто использовал 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 -функцию?

Ответы [ 2 ]

1 голос
/ 26 марта 2020

table дает счетчик частоты, нам нужно получить 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)
1 голос
/ 26 марта 2020

Возможно использование 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
...