分配时的动态总和/计数条件

时间:2019-05-06 14:02:52

标签: r

我有两个数据框( table1 randomdata ),它们具有以下架构:

#randomdata
randomdata$cube = {1,5,3,3,4,5,5,2,2,6,1,2,....} (1000 rows)

#table1
table1$side = {1,2,3,4,5,6} (6 rows)
table1$frequency = NULL

我想从(randomdata$cube的前10行)的多维数据集中,从多维数据集的不同侧面进行计数,并将结果table1$frequency分配给对应的行(基于{{1} }。

我可以这样成功地完成此操作:

table1$side

这很好,但是必须有更好的方法。

我想象不是这样的6条语句:

table1$frequency[1] <- sum(randomdata$cube[1:10] == 1)
table1$frequency[2] <- sum(randomdata$cube[1:10] == 2)
table1$frequency[3] <- sum(randomdata$cube[1:10] == 3)
... 
table1$frequency[6] <- sum(randomdata$cube[1:10] == 6)

有人可以向我展示一种更有活力的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我们可以通过将factor指定为1:6的'cube'列转换为levels然后执行table来做到这一点。如果不这样做,丢失的元素可能会从table输出中丢失。在这里,如果缺少某个级别,则为0

table1$frequency <-  table(factor(randomdata$cube[1:10], levels = 1:6))

或使用tidyverse

library(tidyverse)
randomdata %>%
    slice(1:6) %>%
    count(cube = factor(cube, levels = 1:6), .drop = FALSE) %>%
    pull(n)  %>%
    mutate(table1, frequency = .)