簡體   English   中英

遍歷 R 中列表中包含的數據幀的問題

[英]Problem Iterating through dataframes contained in a list in R

上下文我讀取了 csv 並將內容分成 11 個不同的數據幀。 然后我將數據幀放入這樣的列表中。

SourceCSV= read.csv("dt1Summary.csv",header=TRUE, sep = ';')

df1=SourceCSV[SourceCSV$Number == 122]
df2=SourceCSV[SourceCSV$Number == 430]
...
df11=SourceCSV[SourceCSV$Number == 1830]

dfList = list(df1, df2, ..., df11)

然后我像這樣用 NA-Values 清理了行的數據框

for (i in 1:length(dfList)) {
 dfList[[i]]=dfList[[i]][complete.cases(dfList[[i]]),]
}

現在,當我嘗試運行任何需要以相同方式為列表中的每個元素修改數據幀中的單元格的代碼時,我似乎無法弄清楚如何正確調用內容。

我想在每個單元格中向每個數據幀添加一個值為 1 的列。

但是當我運行時:

for (i in 1:length(dfList)){
    dfList[[i]]$extraCol = 1
}

數據框只是被 11 個值替換為 1。

你能解釋一下我如何正確調用列表中數據幀中的單元格嗎? 以及如何在不使用長度方法的情況下正確循環列表?

我已經使用自定義數據集嘗試了您的代碼,並且您的代碼沒有問題。 這是我生成數據集並運行您發布的代碼的代碼:

dfList <- list("df1" = data.frame("x1" = rnorm(1000), 
                                  "x2" = rnorm(1000), 
                                  "x3" = rnorm(1000)), 
               "df2" = data.frame("x1" = rnorm(1000), 
                                  "x2" = rnorm(1000), 
                                  "x3" = rnorm(1000)), 
               "df3" = data.frame("x1" = rnorm(1000), 
                                  "x2" = rnorm(1000), 
                                  "x3" = rnorm(1000)))
dfList[[1]][c(15,108,201,405,673,702),] <- NA
dfList[[2]][c(105,18,207,504,67,802),] <- NA
dfList[[3]][c(150,408,102,566,773,902),] <- NA

for (i in 1:length(dfList)) {
  dfList[[i]]=dfList[[i]][complete.cases(dfList[[i]]),]
}
for (i in 1:length(dfList)){
  dfList[[i]]$extraCol = 1
}
dfList
$df1
          x1         x2         x3 extraCol
1  0.6898781 -0.1514055  1.2448713        1
2 -0.5443420 -0.8995352 -0.4034141        1
3  0.7767239  0.5620077  0.1774943        1
 [ reached 'max' / getOption("max.print") -- omitted 991 rows ]

$df2
          x1        x2         x3 extraCol
1 -0.7885374 0.9506792  0.6453008        1
2 -1.5811700 0.1110525 -0.3572549        1
3 -1.4067713 0.1001205 -0.8444532        1
 [ reached 'max' / getOption("max.print") -- omitted 991 rows ]

$df3
         x1         x2          x3 extraCol
1 1.5309524 -0.9326038 -0.04479456        1
2 0.5882008  0.9105592 -0.82232054        1
3 1.2161384 -0.4759543 -0.64703306        1
 [ reached 'max' / getOption("max.print") -- omitted 991 rows ]

但是,我認為您的問題是df1=SourceCSV[SourceCSV$Number == 122]和類似的行。 我想你的SourceCSV是一個data.frame ,所以你應該將它索引為df1=SourceCSV[SourceCSV$Number == 122,]來索引數據幀的所有列。 檢查dfX對象是否為data.frames

此外,如果您想避免使用length()函數,您可以使用lapply將函數應用於data.frame中的每個dfList

dfList <- lapply(dfList, function(x) {x[complete.cases(x),]})
dfList <- lapply(dfList, function(x) {x$extraCol = 1; return(x)})  

暫無
暫無

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

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