2013-04-11 101 views
1

我有用於不同時間間隔的數據集。該數據在每個時間間隔的數據之前有三條註釋行。每個時間間隔有500個數據點。我想改變的數據集,使得我有以下格式:從文本文件讀取數據並重塑R中的數據

t1 t2 t3 ................ 
0.00208 0.00417 0.00625 ................. 
a1 a2 a3 ................... 
b1 b2 b3 ................... 
c1 c2 c3 ................. 
............................... 
................................ 

該文件的鏈接如下:https://www.dropbox.com/s/hc8n3qcai1mlxca/WAT_DEP.DAT

正如你將在文件中看到,時間爲每間隔是第二數據開始前第三行的數據。這是第一次,t = 0.00208。我需要將數行中的數據更改爲一列。最後我需要創建一個上面顯示的格式的數據框。在上面的示例中,a1,b1,c1是時間t1的數據,以此類推。

我很抱歉發佈了一個相對較大的數據集。

謝謝你的幫助。

樣本數據添加

的樣品數據如下:

** N:SNAPSHOT TIME  DELT[S] 
** WATER DEPTH [M]: (HP(L),L=2,LA) 
     1800  0.00208 0.10000 
    3.224  3.221  3.220  3.217  3.216  3.214  3.212  3.210  3.209  3.207 
    3.205  3.203  3.202  3.200  3.199  3.197  3.196  3.193  3.192  3.190 
    3.189  3.187  3.186  3.184  3.184  3.182  3.181  3.179  3.178  3.176 
    3.175  3.174  3.173  3.171  3.170  3.169  3.168  3.167  3.166  3.164 
    3.164  3.162  3.162  3.160  3.160  3.158  3.158  3.156  3.156  3.155 
    3.154  3.153  3.152  3.151  3.150  3.150  3.149  3.149  3.147  3.147 
    3.146  3.146  3.145  3.145  3.144  3.144  3.143  3.143  3.142  3.142 
    3.141  3.142  3.141  3.141  3.140  3.141  3.140  3.140  3.139  3.140 
    3.139  3.140  3.139  3.140  3.139  3.140  3.139  3.140  3.139  3.140 
    3.139  3.140  3.140  3.140  3.140  3.141  3.141  3.142  3.141  3.142 
    3.142  3.142  3.143  3.143  3.144  3.144  3.145  3.145  3.146  3.146 
    3.147  3.148  3.149  3.149  3.150  3.150  3.152  3.152  3.153  3.154 
    3.155  3.156  3.157  3.158  3.159  3.160  3.161  3.162  3.163  3.164 
    3.165  3.166  3.168  3.169  3.170  3.171  3.173  3.174  3.176  3.176 
    3.178  3.179  3.181  3.182  3.184  3.185  3.187  3.188  3.190  3.191 
    3.194  3.195  3.196  3.198  3.199  3.202  3.203  3.205  3.207  3.209 
    3.210  3.213  3.214  3.217  3.218  3.221  3.222  3.225  3.226  3.229 
    3.231  3.233  3.235  3.238  3.239  3.242  3.244  3.247  3.248  3.251 
    3.253  3.256  3.258  3.261  3.263  3.266  3.268  3.271  3.273  3.276 
    3.278  3.281  3.283  3.286  3.289  3.292  3.294  3.297  3.299  3.303 
    3.305  3.307  3.311  3.313  3.317  3.319  3.322  3.325  3.328  3.331 
    3.334  3.337  3.340  3.343  3.347  3.349  3.353  3.356  3.359  3.362 
    3.366  3.369  3.372  3.375  3.379  3.382  3.386  3.388  3.392  3.395 
    3.399  3.402  3.406  3.409  3.413  3.416  3.420  3.423  3.427  3.430 
    3.435  3.438  3.442  3.445  3.449  3.453  3.457  3.460  3.464  3.468 
    3.472  3.475  3.479  3.483  3.486  3.491  3.494  3.498  3.502  3.506 
    3.510  3.514  3.518  3.522  3.526  3.531  3.534  3.539  3.542  3.547 
    3.551  3.555  3.559  3.564  3.567  3.572  3.576  3.581  3.584  3.589 
    3.593  3.598  3.602  3.606  3.610  3.615  3.619  3.624  3.628  3.633 
    3.637  3.642  3.646  3.651  3.655  3.660  3.664  3.669  3.673  3.678 
    3.682  3.686  3.691  3.695  3.700  3.704  3.710  3.714  3.719  3.723 
    3.728  3.733  3.738  3.742  3.747  3.752  3.757  3.761  3.766  3.771 
    3.776  3.780  3.786  3.790  3.795  3.800  3.805  3.810  3.815  3.819 
    3.825  3.829  3.835  3.839  3.845  3.849  3.855  3.859  3.865  3.869 
    3.875  3.879  3.885  3.889  3.895  3.900  3.905  3.910  3.915  3.920 
    3.926  3.930  3.935  3.941  3.945  3.951  3.956  3.961  3.966  3.972 
    3.976  3.982  3.987  3.993  3.997  4.003  4.008  4.014  4.018  4.024 
    4.029  4.035  4.039  4.045  4.050  4.056  4.061  4.066  4.071  4.077 
    4.082  4.088  4.093  4.099  4.103  4.109  4.114  4.120  4.125  4.131 
    4.136  4.142  4.147  4.153  4.157  4.163  4.168  4.174  4.179  4.185 
    4.190  4.195  4.201  4.206  4.212  4.217  4.223  4.228  4.234  4.239 
    4.245  4.250  4.256  4.261  4.267  4.272  4.278  4.283  4.289  4.294 
    4.300  4.305  4.311  4.316  4.322  4.327  4.333  4.339  4.345  4.350 
    4.356  4.361  4.367  4.372  4.378  4.383  4.389  4.394  4.400  4.405 
    4.411  4.417  4.423  4.428  4.434  4.439  4.445  4.450  4.456  4.461 
    4.467  4.473  4.478  4.484  4.489  4.495  4.500  4.506  4.511  4.517 
    4.523  4.529  4.534  4.540  4.545  4.551  4.556  4.562  4.568  4.574 
    4.579  4.585  4.590  4.596  4.601  4.607  4.613  4.619  4.624  4.630 
    4.635  4.641  4.646  4.652  4.658  4.664  4.669  4.675  4.680  4.686 
    4.691  4.697  4.703  4.709  4.714  4.720  4.725  4.731  4.736  4.741 
** N:SNAPSHOT TIME  DELT[S] 
** WATER DEPTH [M]: (HP(L),L=2,LA) 
     3600  0.00417 0.10000 
    4.124  4.123  4.123  4.122  4.122  4.121  4.121  4.120  4.120  4.119 
    4.118  4.117  4.117  4.116  4.116  4.115  4.115  4.114  4.114  4.114 
    4.114  4.113  4.113  4.112  4.112  4.111  4.111  4.110  4.110  4.109 
    4.109  4.109  4.109  4.108  4.108  4.107  4.107  4.106  4.107  4.106 
    4.106  4.105  4.105  4.105  4.105  4.104  4.104  4.104  4.104  4.103 
    4.103  4.103  4.102  4.102  4.102  4.102  4.101  4.102  4.101  4.101 
    4.101  4.101  4.100  4.101  4.100  4.101  4.100  4.100  4.100  4.100 
    4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.100 
    4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.100  4.101 
    4.100  4.101  4.100  4.101  4.101  4.101  4.101  4.102  4.101  4.102 
    4.102  4.101  4.102  4.102  4.103  4.102  4.103  4.103  4.104  4.103 
    4.104  4.104  4.105  4.104  4.105  4.105  4.106  4.106  4.107  4.106 
    4.107  4.107  4.108  4.108  4.109  4.109  4.110  4.110  4.110  4.110 
    4.111  4.111  4.112  4.112  4.113  4.113  4.114  4.114  4.115  4.115 
    4.116  4.116  4.117  4.117  4.118  4.118  4.120  4.120  4.121  4.121 
    4.122  4.122  4.122  4.123  4.123  4.125  4.125  4.126  4.126  4.127 
    4.128  4.129  4.129  4.130  4.130  4.132  4.132  4.133  4.133  4.135 
    4.135  4.136  4.137  4.138  4.138  4.139  4.140  4.141  4.141  4.143 
    4.143  4.145  4.145  4.146  4.147  4.148  4.149  4.150  4.150  4.152 
    4.152  4.154  4.154  4.156  4.156  4.158  4.158  4.160  4.160  4.162 
    4.162  4.163  4.164  4.165  4.166  4.167  4.168  4.169  4.171  4.171 
    4.173  4.173  4.175  4.176  4.177  4.178  4.180  4.180  4.182  4.183 
    4.184  4.185  4.187  4.187  4.189  4.190  4.192  4.192  4.194  4.195 
    4.197  4.197  4.199  4.200  4.202  4.203  4.204  4.205  4.207  4.208 
    4.210  4.210  4.212  4.213  4.215  4.216  4.218  4.219  4.221  4.221 
    4.223  4.224  4.225  4.227  4.228  4.230  4.231  4.233  4.234  4.236 
    4.237  4.239  4.240  4.242  4.243  4.245  4.246  4.248  4.249  4.251 
    4.252  4.254  4.255  4.257  4.258  4.260  4.262  4.264  4.265  4.267 
    4.268  4.270  4.271  4.273  4.275  4.277  4.278  4.280  4.281  4.283 
    4.285  4.287  4.288  4.290  4.291  4.294  4.295  4.297  4.298  4.301 
    4.302  4.303  4.305  4.307  4.309  4.310  4.312  4.314  4.316  4.317 
    4.320  4.321  4.323  4.325  4.327  4.328  4.331  4.332  4.334  4.336 
    4.338  4.339  4.342  4.343  4.346  4.347  4.349  4.351  4.353  4.355 
    4.357  4.359  4.361  4.362  4.365  4.366  4.369  4.370  4.373  4.374 
    4.377  4.378  4.381  4.382  4.385  4.386  4.389  4.390  4.393  4.394 
    4.397  4.398  4.400  4.402  4.404  4.406  4.408  4.411  4.412  4.415 
    4.416  4.419  4.421  4.423  4.425  4.427  4.429  4.432  4.433  4.436 
    4.437  4.440  4.442  4.444  4.446  4.449  4.450  4.453  4.455  4.457 
    4.459  4.462  4.463  4.466  4.468  4.470  4.472  4.475  4.476  4.479 
    4.481  4.484  4.485  4.488  4.490  4.492  4.494  4.497  4.499  4.501 
    4.503  4.505  4.508  4.509  4.512  4.514  4.517  4.519  4.521  4.523 
    4.526  4.528  4.530  4.532  4.535  4.537  4.540  4.541  4.544  4.546 
    4.549  4.551  4.554  4.555  4.558  4.560  4.563  4.565  4.568  4.569 
    4.572  4.574  4.577  4.579  4.582  4.584  4.586  4.588  4.591  4.593 
    4.596  4.598  4.601  4.603  4.605  4.607  4.610  4.612  4.615  4.617 
    4.620  4.622  4.624  4.627  4.628  4.631  4.633  4.636  4.638  4.641 
    4.643  4.646  4.648  4.651  4.653  4.656  4.657  4.660  4.662  4.665 
    4.667  4.670  4.672  4.675  4.677  4.680  4.682  4.685  4.687  4.690 
    4.692  4.695  4.697  4.700  4.702  4.705  4.706  4.709  4.711  4.714 
    4.716  4.719  4.721  4.724  4.726  4.729  4.731  4.734  4.736  4.741 

目前,我有10個列,每列的時間的數據。我想創建一個包含500個數據點的單列。所以,我想要排列數據列,以便首先使用行1上的數據,然後使用第二行上的數據等等。這樣,我們將有一列一次。

回答

2

這將產生一個矩陣,result,包含在列中的第一行中的時間和所述數據對應的時間的下方。

L <- readLines(infile) 

nt <- length(grep("TIME", L)) # no. of TIME lines 
nd <- round((length(L)/nt) - 3) # no. of data lines per time 

# times 
ix.times <- rep(c(FALSE, TRUE, FALSE), c(2, 1, nd)) 
times <- scan(text = L[ix.times]) [ c(FALSE, TRUE, FALSE) ] 

# data 
ix.dat <- rep(c(FALSE, TRUE), c(3, nd)) 
dat <- matrix(scan(text = L[ix.dat]), nc = nt) 

result <- rbind(times, dat) 

前幾行是:

> head(result) 
     [,1] [,2] 
times 0.00208 0.00417 
     3.22400 4.12400 
     3.22100 4.12300 
     3.22000 4.12300 
     3.21700 4.12200 
     3.21600 4.12200 
+0

非常感謝。這正是我所期待的。我仍然試圖理解你的代碼。 – 2013-04-11 22:38:57

+1

簡化了一下。 – 2013-04-11 22:49:59

+0

@ G.Grothendieck:我還有一個簡單的問題。如果我有數據,每行不具有相同數量的值,那麼我該怎麼辦?現在你正在使用count == 10的條件。如果一行有5行,其餘行有10行數據會發生什麼?未來我可能會有更多的數據。 – 2013-04-11 22:50:03

2

對於您的問題的第一部分:關於刪除評論線的想法是使用回收。首先,我讀使用fill=TRUE那麼所有的數據:

dat <- read.table(file=file.Name,fill=TRUE) 

然後,因爲你有固定的行數,你可以這樣做:

dat <- dat[c(rep(FALSE,3),rep(TRUE,500)),] 

你會得到一個乾淨的data.frame。

我不明白你問題的第二部分。

+0

嗨,該代碼段Agstudy感謝。我想要的是創建一個數據框,時間作爲標題,數據作爲列。所以,每次我有一組數據,並且會在一列上。第二次,我會有另一個數據,這將在另一列。在示例數據中,我有兩次。如果您查看數據集標題第三行的第二個數據,那麼我希望將其作爲列的標題。我希望我現在說清楚。 – 2013-04-11 21:15:53

+0

但是,如何讓單一時間成爲許多列的標題? – agstudy 2013-04-11 21:23:33

+0

目前,我每次都有10列的數據。我想創建一個包含500個數據點的單列。所以,我想要排列數據列,以便首先使用行1上的數據,然後使用第二行上的數據等等。這樣,我們將有一列一次。 – 2013-04-11 21:25:52

1

第二部分溶液:

首先,調用示例的數據作爲sample。我假設下面的解決方案中有兩列。您可以使用lapply應用於其他列。

col.1<-as.data.frame(sample[,1]) 
col.2<-as.data.frame(sample[,2]) 

Now col.1 and col.2 are dataframes. Try to have the same colnames for `rbind` to work. 

sample.1<-rbind(col.1,col.2)