Организация сложных данных в R - PullRequest
0 голосов
/ 25 февраля 2020

У меня очень большой набор данных. Примерно 300 столбцов, 500 000 строк. Данные аккуратны в том смысле, что в них нет дубликатов или ненужных вещей. Столбцы могут быть организованы по-разному различными способами, что означает, что я хочу создать, например, сумму, скажем, столбцов 5, 8, 10 и 15 в одном случае. Но в другом случае я хочу суммировать столбцы 5, 8, 10 и 274. Создание группы фреймов данных для каждого такого экземпляра явно избыточно. Мой текущий метод борьбы с этим - использование произвольных индексов. Например, вычисление суммы по:

index <- c(5,8,10,274)
sum(df[index])

Это прекрасно работает, но не работает, когда кто-то хочет вычислить сумму по множеству произвольных индексов. Список также будет избыточным, потому что, насколько я знаю, данные придется повторять для каждого нового способа его суммирования. Любые предложения о том, как это должно быть сделано?

Это мой первый вопрос, но я надеюсь, что он понятен без особых сложностей.

edit : Иногда мне нужно используйте большие индексы, что делает нумерацию спецификации c раздражающей. Например: index <- c(3,28,63,93,8,62,188,214,13,43,223,281,18,138,162,288,51,203,253,263,28,58,48,268). Очень сложно узнать, что означают эти цифры, поэтому также удобно просто написать имя.

edit2 :

    set.seed(123)
    df <- data.frame("A" = runif(1000, min = 1, max = 10),
                     "B" = runif(1000, min = 1, max = 10),
                     "C" = runif(1000, min = 1, max = 10),
                     "D" = runif(1000, min = 1, max = 10),
                     "E" = runif(1000, min = 1, max = 10),
                     "F" = runif(1000, min = 1, max = 10),
                     "G" = runif(1000, min = 1, max = 10),
                     "H" = runif(1000, min = 1, max = 10),
                     "I" = runif(1000, min = 1, max = 10),
                     "J" = runif(1000, min = 1, max = 10))

# Suppose I want to sum over A, D, F, and J.
    meaningfulname1 <- c(1,4,6,10) #works fine
sum(df[meaningfulname1])
# Then a few more/other columns
    meaningfulname2 <- c(1,2,5,9,10) #works fine
    sum(df[meaningfulname2]) #both of these work fine, but how do I sum over both at the same time? E.g. below:

    lst <- list(meaningfulname1,meaningfulname2)    
    lapply(df[lst], sum) # doesn't work

1 Ответ

1 голос
/ 25 февраля 2020
set.seed(123)
df <- data.frame("A" = runif(1000, min = 1, max = 10),
                 "B" = runif(1000, min = 1, max = 10),
                 "C" = runif(1000, min = 1, max = 10),
                 "D" = runif(1000, min = 1, max = 10),
                 "E" = runif(1000, min = 1, max = 10),
                 "F" = runif(1000, min = 1, max = 10),
                 "G" = runif(1000, min = 1, max = 10),
                 "H" = runif(1000, min = 1, max = 10),
                 "I" = runif(1000, min = 1, max = 10),
                 "J" = runif(1000, min = 1, max = 10))

meaningfulname1 <- c(1,4,6,10) #works fine
meaningfulname2 <- c(1,2,5,9,10) #works fine
lst <- list(meaningfulname1, meaningfulname2)    
sums_list <- list()
for (i in 1:length(lst)){
sums_list <- c(sums_list, sum(df[lst[[i]]], na.rm = TRUE))     
}

names(sums_list) <- c("meaningfulname1", "meaningfulname2")

sums_list
$meaningfulname1
[1] 22054.61

$meaningfulname2
[1] 27259.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...