Количество экземпляров в списке столбцов строка за строкой - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю с фреймом данных, который включает в себя список-столбец целых чисел.Каждый элемент в столбце списка соответствует строке во фрейме данных, и теперь я хотел бы подсчитать, сколько существует ссылок.

* dput включает в себя столбец link_count, который указывает правильныйпосчитайте для этого образца данных:

move link_count links
   1          1    NA
   2          0     1
   3          1    NA
   4          1     3
   5          4     4
   6          1     5
   7          0  5, 6
   8          2     5
   9          0     8
  10          0  5, 8

#dput results saved as `x`
x <- structure(list(move = 1:10, link_count = c(1, 0, 1, 1, 4, 1, 0, 2, 0, 0), links = list(NA_integer_, 1L, NA_integer_, 3L, 4L, 5L, 5:6, 5L, 8L, c(5L, 8L))), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"), .Names = c("move", "link count", "links"))

Я нашел решение, используя left_join, но я думаю, что, возможно, есть более элегантное решение сделать это построчно, используя dplyr::mutate или purrr::mapрабочие процессы.Я надеюсь на то, что можно было бы сделать в виде последовательности труб.

#This works, but is there a different way?
left_join(x,
      x %>% unnest(links) %>% count(links),
      by = c("move" = "links"))

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Другой вариант с base R полностью основан на ответе @akrun:

x$n <- as.numeric(table(factor(unlist(x$links), levels = x$move)))
0 голосов
/ 20 сентября 2018

Просто для смены темпа я приведу ответ dplyr.Вы можете продолжать вращение трубы, используя right_join:

x %>%
  unnest(links) %>%
  group_by(links) %>%
  summarise(link_count=n()) %>%
  right_join(x, by=c("links"="move"))

## A tibble: 10 x 4
#   links link_count `link count`   links.y
#   <int>      <int>        <dbl>    <list>
# 1     1          1            1 <int [1]>
# 2     2         NA            0 <int [1]>
# 3     3          1            1 <int [1]>
# 4     4          1            1 <int [1]>
# 5     5          4            4 <int [1]>
# 6     6          1            1 <int [1]>
# 7     7         NA            0 <int [2]>
# 8     8          2            2 <int [1]>
# 9     9         NA            0 <int [1]>
#10    10         NA            0 <int [2]>
0 голосов
/ 20 сентября 2018

A base R вариант будет.Здесь отсутствуют элементы NA вместо 0 s

as.numeric(table(unlist(x$links))[as.character(x$move)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...