Как перейти от списка к data.frame в R?

Привет, я работаю над R со следующей таблицей "рефералов":

introducir la descripción de la imagen aquí

Где количество посещений описывает меня на пользователя что у вас было в каждом URL. Моя цель - получить для каждого пользователя только тот URL, на который было больше посещений. Таким образом, я ожидаю получить следующий "out" результат в виде data.frame:

introducir la descripción de la imagen aquí

Я использовал следующий код:

out <- lapply(split(referrals, referrals$USUARIO, drop = TRUE),function(referrals) {
user <- unique(referrals$USUARIO)
ndf<-referrals[referrals$USUARIO==user, ]
idurl <- row.names(ndf[with(ndf, order(-VISITAS)), ][1, ])
besturl <- referrals[idurl, ]
return(besturl)}
)

Но он возвращает мне список, и мне нужно, чтобы он снова был в виде data.frame с тем форматом «out», который я ожидал получить (упоминалось выше). as.data.frame (out) также не работает.

Как я могу изменить функцию, чтобы передать список в формат data.frame "out", который я надеюсь получить?

1
задан 01.06.2016, 15:19
2 ответа

Ты можешь делать следующее:

x <- data.frame(User=factor(c("A", "A", "A", "B", "B", "C")),
                Url=factor(c("url1","url2","url3","url1","url2","url3")),
                Visits=c(10,15,5,2,14,20))
result <- merge(aggregate(Visits ~ User, x, FUN = max), x)[c('User', 'Url', 'Visits')]

И результат этого

is.data.frame(result)

Возвращает

TRUE

Следовательно, его вновь является одним data.frame.

1
ответ дан 24.11.2019, 14:15

Другое решение alternaiva используя dplyr

library(dplyr)

x %>% 
  arrange(desc(Visits)) %>%
  distinct(User)

То, что мы сделали, пошло:

  1. arrange: мы упорядочиваем реестры из-за визитов.
  2. distinct: Мы выбираем реестр из-за User, и ввиду того, что мы упорядочиваем заблаговременно из-за визитов, получаем реестр с самым посещаемым url.

А следовательно мы получаем:

  User  Url Visits
1    C url3     20
2    A url2     15
3    B url2     14
1
ответ дан 24.11.2019, 14:15

Теги

Похожие вопросы