R:读取不带文件头的文件

标签 r read.table

有人向我发送了一个没有 header 的 .txt 文件。此外,没有结构,因此所有行都遵循文件同一行上的前一行。

我唯一知道的是,每 16 个项目(用“,”分隔)在最终输出中应该有一行,因为每个图有 16 个变量或列。原始文件的每一行包含一天 438 个不同绘图的 16 个变量的所有测量值。原始文件总共包含 4015 行(天),我假设每行有 438x16 个项目(可能有 NA)。

我已成功将文件读取为:

x <- readLines("Data/meteodata.dat")
x <- as.data.frame(matrix(as.numeric(unlist(strsplit(x, ","))), ncol = 16, byrow = TRUE))

但是,我现在需要按图聚合变量分组,因此我最终只得到 438 行和 16 列,其中包含每个变量和图的平均值,而不是如此庞大的数据集。问题是这些列不包含用于分组的每个图的标识符。关键是这个困惑的数据集是由其他人从具有 438 行(每个图一个)的数据集 (y) 生成的,该数据集确实包含图标签,并且顺序相同:

> nrow(y)
[1] 438
> head(y)
  CODE_PLOT CODE_COUNTRY
1         1            1
2         1           12
3         1           14
4         1           15
5         1            5
6         1           50

因此,困惑文件的每一行都以相同的顺序对应于“Y”的 CODE_COUNTRY 和 CODE_PLOT。

感谢并抱歉提供如此抽象的消息。

读取之前的文件示例:

48.25,4.25,1.989e+07,2.6,5.89,1.28,0.02,0,0,0.42,3575,0,-0.4,2.6,2.57,6.48,50,6,1.989e+07,3.55,5.42,2.31,0.42,0,0,0.15,2420,0,0.27,3.55,2,7.8

能够读取数据集后的示例:

> head(test)
    lat  long     date temp.mean temp.max temp.min precip   E0  ES0  ET0 radiation snow.depth
1 48.25  4.25 19890000      2.60     5.89     1.28   0.02 0.00 0.00 0.42      3575       0.00
2    50     6 19890000      3.55     5.42     2.31   0.42 0.00 0.00 0.15      2420       0.00
3 47.75 16.25 19890000      0.67     3.98    -0.92   0.63 0.08 0.00 0.53      5061       0.02
4  69.5    29 19890000    -13.63   -10.06   -20.20   0.10 0.00 0.00 0.02        70      16.56
5 41.75  13.5 19890000      2.05     8.79    -1.72   0.00 0.20 0.06 0.54      8206       0.10
6    47  8.75 19890000     -4.29     2.62    -7.97   0.00 0.00 0.00 0.21      7403       5.45
  water.balance temp.mean2 wind P_hPa
1         -0.40       2.60 2.57  6.48
2          0.27       3.55 2.00  7.80
3          0.10       0.67 3.63  5.17
4          0.08     -13.63 3.65  1.78
5         -0.54       2.05 1.58  6.18
6         -0.21      -4.29 1.22  2.87

最佳答案

  #messydata.txt : created by copying/pasting the line above into a textfile. 

   #Load Table into R
    data1 <- read.table("messydata.txt", header=FALSE,sep=",", nrows=2, col.names=paste0("C", 1:16) )
   #In col.names you can create the column names you want

       C1   C2       C3   C4   C5   C6   C7   C8 C9  C10  C11 C12   C13  C14  C15  C16
    1 48.25 4.25 19890000 2.60 5.89 1.28 0.02  0  0 0.42 3575   0 -0.40 2.60 2.57 6.48
    2 50.00 6.00 19890000 3.55 5.42 2.31 0.42  0  0 0.15 2420   0  0.27 3.55 2.00 7.80

   #Option 1- Bind your two tables
    cbind(data1, icp)
   #option 2- Join tables if you have a key Variable "ID" 
    require(plyr)
    newdata<- join(x=data1, y=icp, by = "ID")
#The ID can have a different name in x and y. 

关于R:读取不带文件头的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989997/

相关文章:

r - 如何在R中将文本文件转换为数据帧?

r - R 中的 fread data.table 不读取列名

python - 如何从 R reticulate 调用 Python 方法

r - 在 glm-output 中进行调用 getOption ("width")

替换数据框中变量字符串的部分

r - fread: na.strings 中的空字符串 ("") 不会被解释为 NA

R ggplot : specify aes by index

ruby - Ruby 和类似类型语言中的数组是向量吗?

r - 如何读取标题但也跳过行-read.table()?

r - 导入文本文件时跳过空文件