«Взвешенный» учитывается при каждой комбинации уровней факторов - PullRequest
1 голос
/ 21 марта 2020

У меня есть следующий :

> df=data.frame(from = c("x","y","x","z"), to=c("w","x","w","y"),weight=c(1,1,3,4))
> df
  from to weight
1    x  w      1
2    y  x      1
3    x  w      3
4    z  y      4

Если я хочу вычислить, сколько раз элемент столбца from появляется в , Мне нужно использовать:

> table(df$from)
x y z 
2 1 1 

Это не взвешенная сумма. Во всяком случае, как я мог бы также рассмотреть столбец weight? Например, в моем примере правильный ответ должен быть:

x y z 
4 1 4 

Ответы [ 2 ]

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

Мы можем использовать count из dplyr

library(dplyr)
df %>% 
    count(from, wt = weight)
#  from n
#1    x 4
#2    y 1
#3    z 4

В base R, мы можем использовать xtabs

xtabs(weight~ from, df)
#from
#x y z 
#4 1 4 
1 голос
/ 21 марта 2020

Вы можете использовать tapply и рассчитать sum для каждого уникального значения в from

tapply(df$weight, df$from, sum)

#x y z 
#4 1 4 
...