簡體   English   中英

R:遍歷多個數據幀,保存到列表

[英]R: Loop through multiple data frames, save to list

我正在嘗試對多個數據幀執行簡單的for循環,並將輸出(來自所有數據幀)保存到一個列表中。

這是示例數據:

# Two example data frames (variables x and y)
a <- data.frame(x=rnorm(1:100, 10, 1), y=1:100)
b <- data.frame(x=rnorm(1:100, 500, 50), y=1:100)

# Merging data frames to a list, which we aim to loop through
data_frame_list <- list(a, b)

# Desired list
new_list <- list()

# The loop
# I want two simple values from each data frame (value1 and value2)
for(i in data_frame_list) {
     for(j in 1:5) {
          value1 = i[j,1]
          value2 = i[j,2]
          new_list[i] <- cbind(value1, value2)
     }
}

因此,對於每個j值(1到5),我都希望從每個數據幀獲得value1和value 2。 我想將所有提取的數據放在一個列表中(new_list)。

感謝幫助

其他答案很有幫助,但我想嘗試幫助您修復for循環。

for(i in 1:length(data_frame_list)) {
   for(j in 1:5) {
      value1 = data_frame_list[[i]][j,1]
      value2 = data_frame_list[[i]][j,2]
      new_list[[5*(i-1)+j]] = c(value1, value2)
   }
}

與您的代碼有一些區別:

  • 您需要通過使用[[進行子設置,即使用雙括號,而不是單括號[,]來分配給列表的下一個元素。 在您的代碼中,我收到一個“無效的下標類型'列表'”錯誤,我可以肯定是由於這個原因。
  • cbind創建了您可能不需要的數據結構-如果只需要這些值,使用c()創建向量可能會更容易
  • 在您的代碼中,在外循環的第二次迭代中將替換new_list值。 為了解決這個問題,我需要使用子集訪問循環中的數據幀。 這使我能夠擴展列表的長度,以便它附加第二個數據幀的元素。

希望這可以幫助。

您是否要選擇數據幀a和b的前5列?

如果是這樣,請嘗試以下操作:

new_list <- cbind(a[, 1:5], b[, 1:5])

如果我正確閱讀了您的問題,則您正在嘗試從列表data_frame_list每個元素中獲取前5行數據(包括列)。 如果是這樣,那么這可能會有所幫助:

for(i in data_frame_list) { new_list <- i[1:5, ]}它提供了一個新列表,其中只有第一個列表中每個元素的前5行(包括列)。 如果該列表越來越大,則應合並每個新列表的前五個元素。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM