在確信使用串列管理 R 中的多個資料框是最佳實踐后,我決定將所有具有相同列名的資料框放入串列中。
樣品清單:
#create sample df
df_1 <- data.frame(item = c("a", "b", "c"),
measure = c(1,2,3)
)
df_2 <- data.frame(item = c("x", "y", "z"),
measure = c(4,5,6)
)
#use names as my df has names
data_list <- list(df_1 = df_1, df_2 = df_2)
我想對這些資料幀執行相同的操作,但我不希望它們合并為一個資料幀,因為稍后我需要將每個資料幀保存到單獨的輸出中。
然后它變成了一場噩夢,因為我不知道如何在串列中的所有資料框中操作列。
雖然我們可以選擇特定元素以及串列中的特定 df,但我們如何按列名進行選擇?
舉個例子,我需要將item列中的值更改為大寫。在資料框中我會做
df_1 <- df_1 %>% mutate(item = toupper(item))
我仍在學習撰寫函式并在 R 中使用 apply 系列。對于這個簡單的任務,我相信我可以像這樣使用 lapply 中的現有函式
data_list = lapply(x, toupper)
問題是這里的 x 是什么?有沒有辦法按列子集?喜歡data_list$df_1或data_list[1]可以給我整個df_1。
我希望我可以使用 lapply 和函式在串列中的資料框中逐列進行方法。
uj5u.com熱心網友回復:
另一種選擇是使用mapfrom purrr。因此,如果您已經為串列中的一個資料框撰寫了要執行的操作,則可以將其作為函式放入map. 您使用.x而不是指定特定的資料框。
library(tidyverse)
map(data_list, ~ .x %>%
mutate(item = toupper(item)))
輸出
$df_1
item measure
1 A 1
2 B 2
3 C 3
$df_2
item measure
1 X 4
2 Y 5
3 Z 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/452108.html
下一篇:有條件地復制串列C#
