通过粘贴替代行合并多个数据框
Merging multiple data frames by pasting alternative rows
我有 7 年的英国 Ascii 文本格式的空间天气数据(每个 file/dataframe 都有一年的月度数据 - 12 列和 52201 行,因为每行代表一个位置)。
我想将数据帧与替代行合并 - 数据帧 1 的第一行然后数据帧 2 的第一行到数据帧 7 的第一行然后数据帧 1 的第二行到数据帧 7 的第二行并继续......
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
-1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199
-1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299
-1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399
-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
这是我的代码:
n1<-read.table("data/y1call.txt", sep="")
n2<-read.table("data/y2call.txt", sep="")
n3<-read.table("data/y3call.txt", sep="")
c<-rbind(n1,n2,n3)
merge(n1,n2,n3)
我试过merge
、rbind
、cbind
但都失败了。
您可以在每个数据框中创建一个代表 rownames
的新列,并在 rbind
之后对该变量进行排序,即
ddf_all <- do.call(rbind, lapply(list(df1, df2, df3), function(i)transform(i, new = rownames(i))))
ddf_all[order(ddf_all$new),]
这给出了,
v1 v2 new
1 1 6 1
6 11 16 1
11 21 26 1
2 2 7 2
7 12 17 2
12 22 27 2
3 3 8 3
8 13 18 3
13 23 28 3
4 4 9 4
9 14 19 4
14 24 29 4
5 5 10 5
10 15 20 5
15 25 30 5
数据:
df1 <- data.frame(v1 = c(1, 2, 3, 4, 5), V2 = c(6, 7, 8, 9, 10))
df2 <- data.frame(v1 = c(11, 12, 13, 14, 15), v2 = c(16, 17, 18, 19, 20))
df3 <- data.frame(v1 = c(21, 22, 23, 24, 25), v2 = c(26, 27, 28, 29, 30))
我有 7 年的英国 Ascii 文本格式的空间天气数据(每个 file/dataframe 都有一年的月度数据 - 12 列和 52201 行,因为每行代表一个位置)。 我想将数据帧与替代行合并 - 数据帧 1 的第一行然后数据帧 2 的第一行到数据帧 7 的第一行然后数据帧 1 的第二行到数据帧 7 的第二行并继续......
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
-1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199 -1199
-1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299 -1299
-1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399 -1399
-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
这是我的代码:
n1<-read.table("data/y1call.txt", sep="")
n2<-read.table("data/y2call.txt", sep="")
n3<-read.table("data/y3call.txt", sep="")
c<-rbind(n1,n2,n3)
merge(n1,n2,n3)
我试过merge
、rbind
、cbind
但都失败了。
您可以在每个数据框中创建一个代表 rownames
的新列,并在 rbind
之后对该变量进行排序,即
ddf_all <- do.call(rbind, lapply(list(df1, df2, df3), function(i)transform(i, new = rownames(i))))
ddf_all[order(ddf_all$new),]
这给出了,
v1 v2 new 1 1 6 1 6 11 16 1 11 21 26 1 2 2 7 2 7 12 17 2 12 22 27 2 3 3 8 3 8 13 18 3 13 23 28 3 4 4 9 4 9 14 19 4 14 24 29 4 5 5 10 5 10 15 20 5 15 25 30 5
数据:
df1 <- data.frame(v1 = c(1, 2, 3, 4, 5), V2 = c(6, 7, 8, 9, 10))
df2 <- data.frame(v1 = c(11, 12, 13, 14, 15), v2 = c(16, 17, 18, 19, 20))
df3 <- data.frame(v1 = c(21, 22, 23, 24, 25), v2 = c(26, 27, 28, 29, 30))