назначить частоту как новый столбец в r - PullRequest
1 голос
/ 21 июня 2020

Допустим, у меня есть следующая строка:

a <- c("a", "b", "c", "b", "a", "a", "e")
b <- table(a)

b дает мне частоту каждого элемента в a. Как мне создать фрейм данных с двумя столбцами, первый столбец - это, а во втором у меня частота каждого элемента?

Результат должен выглядеть так:

f <- c(3, 2, 1, 2, 3, 3, 1)
output <- data.frame(a,f)

Спасибо Вам очень заранее!

Ответы [ 2 ]

3 голосов
/ 21 июня 2020

Мы можем использовать add_count для создания нового столбца

library(tibble)
library(dplyr)
tibble(a) %>% 
     add_count(a)

Или в base R с ave

data.frame(a, freq = ave(seq_along(a), a, FUN = length))

Или, если он должен быть из 'b', выполните сопоставление с именами 'b' и вектором 'a', чтобы развернуть вывод table, а затем преобразуйте объект table в data.frame с помощью as.data.frame

as.data.frame(b[a])
#  a Freq
#1 a    3
#2 b    2
#3 c    1
#4 b    2
#5 a    3
#6 a    3
#7 e    1
2 голосов
/ 21 июня 2020

Использование слияния:

merge(as.data.frame(a), as.data.frame(table(a)))

#  a Freq
#1 a    3
#2 a    3
#3 a    3
#4 b    2
#5 b    2
#6 c    1
#7 e    1
...