首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用read.csv进行数据清洗

用read.csv进行数据清洗
EN

Stack Overflow用户
提问于 2017-05-16 08:23:12
回答 1查看 271关注 0票数 1

作为初学者,我想问您,哪种方法更优雅、更有效地清理大.csv数据:我尝试过两种解决方案(在help()中找到,这里和文献中),但我不确定是否有更好的解决方案(比如循环?)你可以建议我。

我的(对R不太友好) .csv数据(523行,47列,这里只是开头):

代码语言:javascript
复制
;;;
;;;
;;;
Name;#1;#2;#3
Correction;;;          
Date;19.09.2016;19.09.2016;19.09.2016
Time;12:05:03;12:06:01;12:07:00
T_int [ms];806;800;884
Ev [lx];1,31E+03;1,35E+03;1,27E+03
Ee [W/sqm] (380-780nm);4,22E+00;4,38E+00;4,17E+00
;;;
;;;
Chrom. Coord.;;;           
x;0,3657;0,3642;0,3643
y;0,3842;0,3831;0,3833
u';0,2126;0,2121;0,2121
v';0,5026;0,502;0,5021
;;;

我只想选择一些信息( 523行中大约有450行),并且在最后有一个转置的数据框架,如:

代码语言:javascript
复制
   Date       Time     Ev   # ...
V2 2016-09-19 12:05:03 1310 # ...
V3 2016-09-19 12:06:01 1350 # ...
V4 2016-09-19 12:07:00 1270 # ...
# [...]

我尝试的方法是:

代码语言:javascript
复制
Date <- t(read.csv2("filename", nrows=1, skip=5, header=F)[,-1])
Time <- t(read.csv2("filename", nrows=1, skip=6, header=F)[,-1])
Ev <- t(read.csv2("filename", nrows=1, skip=8, header=F)[,-1])
# [...] (for all the about 450 choosen vectors!!!)
df <- data.frame(Date = Date, Time = Time, Ev = Ev) # ...

代码语言:javascript
复制
columns <- c(n1, n2, n3, n4, n5, Date, Time, n6, Ev) # [...]
raw_csv <- t(read.csv2("filename", header=F, col.names = columns, colClasses = c(rep("NULL",5),rep("Date",2),"NULL","numeric")) # ...
df <- data.frame(raw_csv)

我觉得我无法找到更好的结构,避免分别定义450次我想要的东西和找到它的地方。

在这两种情况下,我甚至没有达到我的目标,因为在.csv中失去了空格,括号等等。同时也有太多问题,我想.

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 08:44:07

虽然您需要的最终表单将非常依赖于所讨论的文件的细节,但是对于您在这里展示的内容,您可以在不太疯狂的情况下破解这些数据:

代码语言:javascript
复制
library(tidyverse)

df <- read_csv2(file, col_names = FALSE) %>% 
    filter(rowSums(!is.na(.)) > 0) %>% 
    magrittr::set_rownames(.[[1]]) %>% 
    select(-1) %>% 
    t() %>% 
    as_data_frame() %>% 
    type_convert(col_types = cols(Date = col_date('%d.%m.%Y')), 
                 locale = locale(decimal_mark = ','))

df
#> # A tibble: 3 x 12
#>    Name Correction       Date     Time `T_int [ms]` `Ev [lx]`
#>   <chr>      <chr>     <date>   <time>        <int>     <dbl>
#> 1    #1       <NA> 2016-09-19 12:05:03          806      1310
#> 2    #2       <NA> 2016-09-19 12:06:01          800      1350
#> 3    #3       <NA> 2016-09-19 12:07:00          884      1270
#> # ... with 6 more variables: `Ee [W/sqm] (380-780nm)` <dbl>, `Chrom.
#> #   Coord.` <chr>, x <dbl>, y <dbl>, `u'` <dbl>, `v'` <dbl>

数据

代码语言:javascript
复制
file <- ";;;
;;;
;;;
Name;#1;#2;#3
Correction;;;          
Date;19.09.2016;19.09.2016;19.09.2016
Time;12:05:03;12:06:01;12:07:00
T_int [ms];806;800;884
Ev [lx];1,31E+03;1,35E+03;1,27E+03
Ee [W/sqm] (380-780nm);4,22E+00;4,38E+00;4,17E+00
;;;
;;;
Chrom. Coord.;;;           
x;0,3657;0,3642;0,3643
y;0,3842;0,3831;0,3833
u';0,2126;0,2121;0,2121
v';0,5026;0,502;0,5021
;;;"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43996093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档