подведение итогов первых 5 элементов списка - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть фрейм данных, который содержит столбец с переменным числом целочисленных значений. Мне нужно взять первые пять из этих значений и суммировать их. Я нашел способ сделать это для одного, но не могу обобщить его до l oop через все:

dataframe excerpt

Вот код для первого элемента:

results$occupied[1] %>%
  strsplit(",") %>%
  as.list() %>%
  unlist() %>%
  head(5) %>%
  as.numeric() %>%
  sum()

А что не работает для всех элементов:

results %>%
  rowwise() %>%
  select(occupied) %>%
  as.character() %>%
  strsplit(",") %>%
  as.list() %>%
  unlist() %>%
  head(5) %>%
  as.numeric() %>%
  sum()

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

В базе R вы можете сделать:

sapply(strsplit(results$occupied, ","), function(x) sum(as.numeric(head(x, 5))))

Или использовать dplyr и purrr

library(dplyr)
library(purrr)

results %>%
    mutate(total_sum = map_dbl(strsplit(occupied, ","), 
                        ~sum(as.numeric(head(.x, 5)))))

Аналогично, используя строку:

results %>%
   rowwise() %>%
   mutate(total_sum = sum(as.numeric(head(strsplit(occupied, ",")[[1]], 5))))
0 голосов
/ 16 апреля 2020

Мы можем использовать separate_rows, чтобы разделить «занятый» столбец и развернуть строки, затем выполнить группирование по номеру строки и получить sum из первых пяти элементов

library(dplyr)
library(tidyr)
results %>%
   mutate(rn = row_number()) %>%
   separate_rows(occupied, convert = TRUE) %>%
   group_by(rn) %>%
   slice(seq_len(5)) %>%
   summmarise(total_sum = sum(occupied)) %>%
   select(-rn) %>%
   bind_cols(results, .)
...