我正在处理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
的,cat
的,等等(。通常我只使用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
-函数?
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
或dplyr
中的count
library(dplyr)
data %>%
count(name, wt = amount)
可能使用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