我有两个数据框( 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)
有人可以向我展示一种更有活力的方法吗?
谢谢。
答案 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 = .)