Найдите наиболее часто встречающийся элемент в строке со списками в R - PullRequest
1 голос
/ 05 мая 2020

У меня есть следующая таблица данных:

n    col1
1    c('1', '1', '2')
2    1
3    c('3', '3', '1')
4    3

И в качестве вывода я хочу, чтобы в каждой из строк появлялся только самый частый символ, поэтому это будет примерно так:

 n    col2
 1    1
 2    1
 3    3
 4    3

Я действительно не знаю, как подойти к этой проблеме в R. Это должно быть что-то вроде поиска наиболее частого значения в списке. Я погуглил, что есть функция table (), но не могу понять, как мне ее здесь использовать. Это не похоже на что-то действительно сложное, но я просто не могу понять

1 Ответ

2 голосов
/ 05 мая 2020

Мы можем использовать Mode отсюда

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

df1$col2 <- sapply(df1$col1, Mode)
df1$col2
#[1] "1" "1" "3" "3"

Или с tidyverse

library(dplyr)
library(purrr)
df1 %>%
    transmute(n, col2 = map_chr(col1, Mode))

data

df1 <- data.frame(n = 1:4, col1 = I(list(c('1', '1', '2'), '1', 
      c('3', '3', '1'), '3')))
...