使用dplyr来处理嵌入在csv

时间:2017-11-22 16:02:24

标签: r csv dplyr

首先,我在我职业生涯的大部分时间里使用base-r后学习使用dplyr(不是真正的数据分析师,而是试图学习)。我不知道dplyr是否是最佳选择,或者我是否应该使用别的东西。

我有一个非常混乱的设备生成的数据文件。在数据中嵌入标题/墓碑数据(该位置的数据行之间的特定位置的时间/日期/位置/传感器数据)。文件相对较大(150,000个观测值x 14个变量),我已成功使用dplyr将实际数据与墓碑数据分开(墓碑数据有14行信息分布在14列)。

我正在尝试创建单行的逻辑删除信息以附加到实际测量值,以便在R中可以轻松读取以进行分析,而无需依赖制造商的“黑盒”解决方案。

数据文件的示例和我的脚本如下:

# Read csv file of data into R
data <- read_csv("data.csv", col_names = FALSE)
data
# A tibble: 155,538 x 14
    X1       X2        X3        X4    X5    X6    X7    X8     X9    X10    X11    X12    X13        X14
 <dbl>    <chr>     <chr>     <chr> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>      <dbl>
1      NA    80.00     19.00      0.00  37.0   1.0   0.0  3.00     NA     NA     NA     NA     NA         NA
2 1.4e+01     8.00      6.00     13.00  43.0   9.0  33.0 50.00   1.00  -1.60  -2.00  50.10  14.88         NA
3 5.9e-01     5.15      2.02     -0.57   0.0   0.0   0.0  0.00  24.58  28.02  25.64  25.37     NA         NA
4 0.0e+00     0.00      0.00      0.00   0.0    NA    NA    NA     NA     NA     NA     NA     NA         NA
5 3.0e+04 30000.00 -32768.00 -32768.00   0.0    NA    NA    NA     NA     NA     NA     NA     NA         NA
6 0.0e+00     0.00      0.00      0.00   0.0   0.0   0.0  0.25  20.30     NA     NA     NA     NA         NA
7 3.7e+01       cm        BT    counts   1.0   0.1    NA    NA     NA     NA     NA     NA     NA         NA
8      NA     0.25     13.30    145.46   7.5 -11.0   2.1  0.80 157.00 149.00 158.00 143.00 100.00 2147483647
9      NA     0.35     13.37    144.54   7.8 -10.9   2.4 -0.40 153.00 150.00 148.00 146.00 100.00 2147483647
10     NA     0.45     14.49    144.65   8.4 -11.8   1.8 -0.90 139.00 156.00 151.00 152.00 100.00 2147483647
# ... with 155,528 more rows

# Get header information from file and create index(ens) of header information to later append header data to each line of measured data
header <- data %>%
  filter(!is.na(data[,1])) %>%
  mutate_all(as.character) %>%
  mutate(ens = rep(1:(nrow(header)/6), each = 6)) %>%
  group_by(ens) 

n.head <- bind_cols(header[header$ens == 1,][1,], header[header$ens == 1,][2,], header[header$ens == 1,][3,], header[header$ens == 1,][4,], header[header$ens == 1,][5,], header[header$ens == 1,][6,])

行2:7有我正在尝试使用的信息,我知道创建一行90多个变量并不理想,但这是清理这些数据的第一步,以便我可以使用它。

最后一行n.head是我希望最终得到的,而不需要写一个循环来运行~2,000次...任何帮助将不胜感激,感谢您提前输入!

1 个答案:

答案 0 :(得分:2)

这里的技巧是使用Thread one = new Thread() { public void run() { while (true) { for (int m = listlen - 1; m >= 1; m--) { flag = 0; for (int n = 0; n < m; n++) { try { Thread.sleep(100); } catch (InterruptedException ex) { } if (a[n + 1] < a[n]) { temp = a[n + 1]; repaint(); a[n + 1] = a[n]; repaint(); a[n] = temp; repaint(); flag = 1; } } if (flag == 0) { m = 0; } } } } }; one.start(); tidy::spread()将标题列展开到单行数据框中。

tibble::enframe