上下文 我读取了一个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值清除行的数据框
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代替。
您能解释一下如何正确调用列表数据框中的单元格吗? 以及如何不使用length方法正确遍历列表?
答案 0 :(得分:0)
我已经使用自定义数据集尝试了您的代码,但是您的代码没有问题。这是我的代码,用于生成数据集并运行您发布的代码:
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)})