對于我正在處理的專案,我需要使用串列中所有值的累積總和創建新變數。我的串列有大約 2000 個不同的條目(應用程式),一年中每天的總下載量。為了進一步正確分析這一點,我需要將累積總和放入一個新變數中。我知道如何為單個實體apps$cum_app1 <- cumsum(apps$app1)執行此操作,但是為所有 2000 個應用程式手動執行此操作會太麻煩。
我這里有一個小樣本作為例子:
apps <- list(App1 = c(23000, 15488, 45228, 48599, 46524),
App2 = c(65465, 1435, 6848, 68466),
App3 = c(45648, 564, 65848, 6546),
App4 = c(654, 64689, 65433))
通常我會使用以下內容:
apps <- as.data.frame(apps)
apps <- apps %>%
mutate_all(list(c = ~ cumsum(.)))
apps <- as.list(apps)
但是不同的變數有不同的行數,所以這是不可能的。
我需要輸出保持串列格式,因為這是進一步分析所必需的。
我正在考慮創建一個 for 回圈來執行此操作,但隨后我不確定如何準確執行此操作。因此,我希望新變數的名稱為:App1_cum,然后是累積總和。有人可以幫我嗎?
uj5u.com熱心網友回復:
這是一個基本的R方式。
首先計算lapply回圈中的累積和。然后設定新串列的名稱。并將append結果轉為原始串列。最后,通過洗掉臨時串列進行整理。
tmp <- lapply(apps, cumsum)
names(tmp) <- paste("cum", names(apps), sep = "_")
apps <- append(apps, tmp)
rm(tmp)
uj5u.com熱心網友回復:
使用dplyr和purrr動詞,你可以這樣做:
apps %>%
map(., ~ as_tibble(.) %>%
mutate(cumsum = cumsum(.x))) %>%
imap(., function(x, y) x %>% rename_with(~ paste0(., "_", y)))
這給出了所需的輸出:
$App1
# A tibble: 5 x 2
value_App1 cumsum_App1
<dbl> <dbl>
1 23000 23000
2 15488 38488
3 45228 83716
4 48599 132315
5 46524 178839
$App2
# A tibble: 4 x 2
value_App2 cumsum_App2
<dbl> <dbl>
1 65465 65465
2 1435 66900
3 6848 73748
4 68466 142214
$App3
# A tibble: 4 x 2
value_App3 cumsum_App3
<dbl> <dbl>
1 45648 45648
2 564 46212
3 65848 112060
4 6546 118606
$App4
# A tibble: 3 x 2
value_App4 cumsum_App4
<dbl> <dbl>
1 654 654
2 64689 65343
3 65433 130776
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/372988.html
標籤:r
