簡體   English   中英

更改列表中存儲的數據框

[英]Altering dataframes stored within a list

我正在嘗試編寫某種循環函數,使我可以將同一組代碼應用於存儲在一個列表中的數十個數據幀。 每個數據幀具有相同的列數和每列相同的標頭,盡管行數在數據幀之間有所不同。

這些數據來自以自我為中心的社交網絡研究,在該研究中,我以邊緣列表格式從數十個不同的受訪者那里收集了自我網絡數據。 我使用的數據收集軟件將每個采訪中的數據存儲在其自己的.csv文件中。 這是特定數據幀的原始數據的圖像(原始數據的圖像 )。

出於我的目的,我只需要使用第四,第六和第七列中的數據。 此外,我只需要最后一列的值為4的數據行,此時最后一列可以完全刪除。 最終結果是一個兩列的數據框,它表示成對的人之間的關系。

讀取數據並將其存儲為對象后,我運行了以下代碼:

x100291 = `100291AlterPair.csv`       #new object based on raw data
foc.altername = x100291$Alter.1.Name  
altername = x100291$Alter.2.Name      
tievalue = x100291$AlterPair_B        
tie = tievalue                        
tie[(tie<4)] = NA                     
egonet.name = data.frame(foc.altername, altername, tievalue) 
depleted.name = cbind(tie,egonet.name)
depleted.name = depleted.name[is.na(depleted.name[,1]) == F,] 
dep.ego.name = data.frame(depleted.name$foc.altername, depleted.name$altername)

這產生了以下數據幀( 最終數據的圖像 )。 這最終就是我想要的。

現在我知道我可以將同一組代碼剪切並粘貼100多次,並手動更改文件名,但是我不希望這樣做。 相反,我將所有原始.csv文件存儲為單個列表中的數據幀。 我懷疑可以使用apply命令之一在所有數據幀上應用相同的代碼,但是我無法弄清楚。

有人對我如何將基本代碼應用於數據框列表有任何建議,以便最終得到一個包含清除和精簡版本的數據的新列表嗎?

非常感謝!

邏輯可以簡化。 嘗試創建自定義函數並將其應用於所有數據框。

cleanDF <- function(mydf) {
  if( all(!c('AlterPair_B', 'Alter.1.Name', 'Alter.2.Name') %in% 
          names(mydf))) stop("Check data frame names")

  condition <- mydf[, 'AlterPair_B'] >= 4
  mydf[condition, c("Alter.1.Name", "Alter.2.Name")]
}
big_list <- lapply(all_my_files, read.csv)  #read in all data frames
result <- do.call('rbind', lapply(big_list, cleanDF))

定制函數cleanDF首先檢查所有相關的列名是否存在。 然后,它定義4個或更多“ AlterPair_B”的條件。 最后,根據該條件將兩個目標列作為子集。 我使用了一個名為“ big_list”的列表,該列表代表所有數據幀。

您沒有提供可復制的示例,因此很難解決您的問題。 但是,我不希望您的問題仍然懸而未決。 的確,使用lapply是一個快速的解決方案,通常比loop更可取。 但是,由於您提到的是初學者,因此以下是使用loop ,它更容易理解。

您需要將所有csv文件放在一個文件夾中,僅此而已。 然后,您讀取文件名並將它們放在list 您可以使用NULL初始化一個空的結果對象。 然后,您可以loop讀取所有文件,進行計算並在result對象中rbind結果。

path <-"C:/temp/csv/"
list_of_csv_files <- list.files(path)

result <- NULL
for (filenames in list_of_csv_files) {
input <- read.csv(paste0(path,filenames), header=TRUE, stringsAsFactors=FALSE)
#Do your calculations
input_with_calculations <- input
result <- rbind(result,input_with_calculations)
}
result

暫無
暫無

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

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