【问题标题】:Appending into data frame with a for loop [duplicate]使用for循环附加到数据帧中[重复]
【发布时间】:2017-05-19 21:52:12
【问题描述】:

我想读取一些文件,然后从读取的文件中删除 NA 值,然后给出删除 NA 后留下的观察次数 我写了这个脚本,但结果太奇怪了

 complete <- function(directory, id){
    fileList <- list.files(directory, full.names = TRUE)[id]
    datafamelist <- data.frame(id = numeric(), nobs = numeric())
    for(Rfile in fileList){
        cleandata <- na.omit(read.csv(file = Rfile))
        datafamelist <- rbind(datafamelist, c(cleandata$ID, nrow(cleandata)))
    }
    datafamelist
 }

结果是这样的:

complete("~/Desktop/DataSets/specdata", 1:5)

  X1L X1L.1 X1L.2 X1L.3 X1L.4 X1L.5 X1L.6 X1L.7 X1L.8 X1L.9 X1L.10 X1L.11 X1L.12 X1L.13 X1L.14 X1L.15 X1L.16 X1L.17 X1L.18 X1L.19
1   1     1     1     1     1     1     1     1     1     1      1      1      1      1      1      1      1      1      1      1
2   2     2     2     2     2     2     2     2     2     2      2      2      2      2      2      2      2      2      2      2
3   3     3     3     3     3     3     3     3     3     3      3      3      3      3      3      3      3      3      3      3
4   4     4     4     4     4     4     4     4     4     4      4      4      4      4      4      4      4      4      4      4
5   5     5     5     5     5     5     5     5     5     5      5      5      5      5      5      5      5      5      5      5
  X1L.20 X1L.21 X1L.22 X1L.23 X1L.24 X1L.25 X1L.26 X1L.27 X1L.28 X1L.29 X1L.30 X1L.31 X1L.32 X1L.33 X1L.34 X1L.35 X1L.36 X1L.37
1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1
2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2
3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3
4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4
5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5
  X1L.38 X1L.39 X1L.40 X1L.41 X1L.42 X1L.43 X1L.44 X1L.45 X1L.46 X1L.47 X1L.48 X1L.49 X1L.50 X1L.51 X1L.52 X1L.53 X1L.54 X1L.55
1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1
2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2
3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3
4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4
5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5
  X1L.56 X1L.57 X1L.58 X1L.59 X1L.60 X1L.61 X1L.62 X1L.63 X1L.64 X1L.65 X1L.66 X1L.67 X1L.68 X1L.69 X1L.70 X1L.71 X1L.72 X1L.73
1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1
2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2
3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3
4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4
5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5
  X1L.74 X1L.75 X1L.76 X1L.77 X1L.78 X1L.79 X1L.80 X1L.81 X1L.82 X1L.83 X1L.84 X1L.85 X1L.86 X1L.87 X1L.88 X1L.89 X1L.90 X1L.91
1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1      1
2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2      2
3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3      3
4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4      4
5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5      5
  X1L.92 X1L.93 X1L.94 X1L.95 X1L.96 X1L.97 X1L.98 X1L.99 X1L.100 X1L.101 X1L.102 X1L.103 X1L.104 X1L.105 X1L.106 X1L.107 X1L.108
1      1      1      1      1      1      1      1      1       1       1       1       1       1       1       1       1       1
2      2      2      2      2      2      2      2      2       2       2       2       2       2       2       2       2       2
3      3      3      3      3      3      3      3      3       3       3       3       3       3       3       3       3       3
4      4      4      4      4      4      4      4      4       4       4       4       4       4       4       4       4       4
5      5      5      5      5      5      5      5      5       5       5       5       5       5       5       5       5       5
  X1L.109 X1L.110 X1L.111 X1L.112 X1L.113 X1L.114 X1L.115 X1L.116 X117L
1       1       1       1       1       1       1       1       1   117
2       2       2       2       2       2       2       2       2     2
3       3       3       3       3       3       3       3       3     3
4       4       4       4       4       4       4       4       4     4
5       5       5       5       5       5       5       5       5     5

而不是这样:

##   id nobs
## 1  1  117
## 2  2  000
## 3  3  000
## 4  4  000
## 5  5  000

其中 000 是应该存在的观察值的数量

【问题讨论】:

  • 对不起,我忘了添加,我正在使用:Linux mint 18.1 上的 R 版本 3.3.2
  • @Procrastinatus Maximus 非常感谢您非常有帮助,我不知道这是我的问题重复,因为我确实多次寻找解决方案但一无所获,但我真的很感谢您的回答谢谢队友
  • 另一件事,我曾像这样使用我的函数,因为我猜它更通用,所以你不必再担心名称了:完成

标签: r dataframe data-science


【解决方案1】:

尝试像这样读取并形成您的数据框

setwd("<Your Directory>") 
file_list <- list.files()

for (file in file_list){

  # if the merged dataset doesn't exist, create it
  if (!exists("rawdata")){
    rawdata <- read.csv(file)
  }

  # if the merged dataset does exist, append to it
  if (exists("rawdata")){
    temp_dataset <- read.csv(file)
    rawdata<-rbind(rawdata, temp_dataset)
    rm(temp_dataset)
  }

}

对于 NA,您可以检查哪一列包含 NA 并根据其工作

要检查 NA,请使用 summary

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 2015-04-05
    • 2016-12-19
    • 1970-01-01
    • 2016-01-31
    • 2017-10-21
    • 2016-10-13
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多