我有幾個要回圈的資料幀(dataframe_1,dataframe_2...),以便在所有資料幀上執行相同的功能。這些功能是:
- 選擇特定列:
dataframe_1 <- dataframe_1[, c("Column_1", "Column_2")]
- 重命名列:
dataframe_1 <- rename(dtaframe_1, New_Name_for_Column_1 = Column_1)
- 創建新列。例如,通過使用以下
ifelse()函式:
dataframe_1$Column_3 <- ifelse(dataframe_1$Column_1 = 5, 1, 0)
我已經用一些資料幀單獨證明了代碼,沒有錯誤。
但是,如果我執行以下回圈:
list_dataframes = list(dataframe_1, dataframe_2)
for (dataframe in 1:length(list_dataframes)){
dataframe <- dataframe[, c("Column_1", "Column_2")]
dataframe <- rename(dtaframe, New_Name_for_Column_1 = Column_1)
dataframe$Column_3 <- ifelse(dataframe$Column_1 = 5, 1, 0)
}
出現以下錯誤:
Error in dataframe[, c("Column_1", "Column_2", :
incorrect number of dimensions
(所有資料框都具有相同的列名。)
任何的想法?
謝謝!
uj5u.com熱心網友回復:
您不是在遍歷資料框串列,而是遍歷一個序列1:length(list_dataframes)。考慮以下說明:
a = list("a", "b")
for (i in a){print(i)}
for (i in 1:length(a)){print(i)}
在您的代碼中,您需要像這樣顯式訪問串列元素:
list_dataframes = list(dataframe_1, dataframe_2)
for (df_number in 1:length(list_dataframes)){
list_dataframes[[df_number]] <- list_dataframes[[df_number]][, c("Column_1", "Column_2")]
list_dataframes[[df_number]] <- rename(list_dataframes[[df_number]], New_Name_for_Column_1 = Column_1)
list_dataframes[[df_number]]$Column_3 <- ifelse(list_dataframes[[df_number]]$Column_1 = 5, 1, 0)
}
uj5u.com熱心網友回復:
該代碼for (dataframe in 1:length(list_dataframes))創建了一個數字向量,c(1,2)其中一次一個值的值存盤在名為 的變數中dataframe。這個迭代變數是標量的,即它有 1 維和 1 的長度。這就是為什么你不能子集這樣dataframe[, c("Column_1", "Column_2")]做而不是這樣做:list_dataframes[[dataframe]][, c("Column_1", "Column_2")]
uj5u.com熱心網友回復:
purrr::map_dfr()您可以嘗試使用例如迭代資料幀
list_dataframes = list(dataframe_1, dataframe_2)
library(dplyr)
library(purrr)
list_dataframes %>%
map_dfr(~.x %>%
select(Column_1, Column_2) %>%
rename(New_Name_for_Column_1 = Column_1) %>%
mutate(Column3= ifelse(Column_1 == 5, 1, 0)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480399.html
上一篇:在R中按名稱合并資料框和總和
