Динамическая сумма / условие счета при назначении - PullRequest
1 голос
/ 06 мая 2019

У меня есть два фрейма данных (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

Я хочу посчитать вхождение с разных сторон куба (из первых 10 строк из randomdata$cube) и назначить результат для table1$frequency соответствующей строке (на основе table1$side).

Я могу сделать это успешно следующим образом:

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)

Это работает очень хорошо, но должен быть лучший способ.

Вместо 6 утверждений я представляю что-то вроде этого:

table1$frequency <- sum(randomdata$cube[1:10] == table1$side)

Может кто-нибудь показать мне более динамичный способ сделать это?

Спасибо.

1 Ответ

1 голос
/ 06 мая 2019

Мы можем сделать это, преобразовав столбец 'cube' в factor с levels, указанным как 1: 6, и затем сделав 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 = .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...