簡體   English   中英

for 嵌套在 R 中的循環

[英]for loops nested in R

我有一個數據集dt ,它存儲了列表數據集名稱,我需要使用它們創建一些帶有 select 一些變量的新數據集,然后我使用我剛剛創建的數據集,重復相同的過程.....

第一行和第二行是可用的數據。 然后使用可用數據創建新數據。 然后使用 data just create 創建一個新數據

最終的 output 是數據集列表

我感謝任何幫助或建議。

dt <- data.frame(name = c("mtcars","iris", "mtcars_new","mtcars_new_1"),
                 data_source = c("mtcars","iris", "mtcars","mtcars_new"),
                 variable = c("","","mpg,cyl,am,hp","mpg,cyl"), stringsAsFactors = FALSE)

> dt
          name data_source      variable
1       mtcars      mtcars              
2         iris        iris              
3   mtcars_new      mtcars mpg,cyl,am,hp
4 mtcars_new_1  mtcars_new       mpg,cyl


dt_list <- list(mtcars, iris)
names(dt_list ) <- c("mtcars","iris")


# The final list of datasets
final_dt <- list(mtcars, iris,  mtcars_new, mtcars_new_1)

到目前為止,如果我寫了一個這樣的循環,我只得到了mtcars_new數據集,但我不知道如何返回列表並繼續循環以獲取mtcars_new_1等等。 我有很多數據集,我不知道應該循環嵌套數據多少次。

mtcars_new <- data.frame()

for(i in 1:nrow(dt)){
  if(dt$data_source[[i]] %in% names(dt_list) && !dt$name[[i]] %in% names(dt_list)){
    check <- eval(parse(text = dt$data_source[[i]]))
    var <- c(unlist(strsplit(dt$variable[[i]],",")))
    mtcars_new <- check[, colnames(check) %in% var]
}
}

這將產生所示的所需 output。 由於第四個循環使用在第三個循環中創建的數據,因此您需要有一種方法將每個循環的結果添加到一個不斷增長的可用數據集列表中。 然后在每個循環中從可用列表中找到正確的起始數據集。

dt <- data.frame(name = c("mtcars","iris", "mtcars_new","mtcars_new_1"),
                 data_source = c("mtcars","iris", "mtcars","mtcars_new"),
                 variable = c("","","mpg,cyl,am,hp","mpg,cyl"), stringsAsFactors = FALSE)

input_data_sets <- list(mtcars, iris)
names(input_data_sets) <- c("mtcars","iris")

final_data_sets <- list()

for(i in 1:nrow(dt)) {
  
  available_data_sets <- c(input_data_sets, final_data_sets)  #Grows a list of all available data sets
  num_to_use <- which(dt$data_source[[i]] == names(available_data_sets)) #finds the right list member to use

  temp <- available_data_sets[num_to_use][[1]]
  var <- c(unlist(strsplit(dt$variable[[i]],",")))
  
  temp <- list(subset(temp, select = var)) #keep only the desired variables
  names(temp) <- dt$name[i] #assign the name provided
  
  final_data_sets <- c(final_data_sets, temp) #add to list of final data sets which will be the output. Anything listed here will become part of the available list in the next loop
  
}

暫無
暫無

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

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