有人向我发送了一个没有标题的.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列包含每个变量和绘图的平均值,而不是如此庞大的数据集。问题是列不包含要分组的每个绘图的标识符。关键是这个混乱的数据集是由数据集(y)中的其他人生成的,其中包含438行(每个绘图一行),其中包含绘图标签,并且顺序相同:
> 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
因此,MESSY文件的每一行都与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
答案 0 :(得分:0)
尝试将数据作为单个向量读取(可能使用readLines
或scan
),然后通过矩阵将其转换为data.frame:
# read in data
x <- "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"
# convert to data.frame by organizing as a 2x16 matrix
as.data.frame(matrix(strsplit(x, ",")[[1]], ncol = 16, byrow = TRUE))
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
## 1 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
## 2 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
您可能希望在强制转换为data.frame之前将数据转换为数字,否则您将从中获取因子变量:
as.data.frame(matrix(as.numeric(strsplit(x, ",")[[1]]), ncol = 16, byrow = TRUE))
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
## 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
如果数据与您的icp
data.frame一行一行完美匹配,则可以cbind
将它们放在一起。
答案 1 :(得分:0)
#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.