【发布时间】:2019-02-13 15:43:43
【问题描述】:
给定一个包含所有可能行和列的df,每一行都是一个人,其中X1, X2, X3是这个人的id,而所有Y columns都是那个人的数据:
> df
X1 X2 X3 Y4 Y5 Y6 Y7 Y8 Y9 Y10
1 1 e 80 NA NA NA NA NA NA NA
2 4 w 47 NA NA NA NA NA NA NA
3 5 f 54 NA NA NA NA NA NA NA
4 6 c 94 NA NA NA NA NA NA NA
5 6 s 54 NA NA NA NA NA NA NA
6 7 r 22 NA NA NA NA NA NA NA
7 9 f 78 NA NA NA NA NA NA NA
8 9 p 26 NA NA NA NA NA NA NA
9 9 x 15 NA NA NA NA NA NA NA
10 9 y 16 NA NA NA NA NA NA NA
> a
X1 X2 X3 Y5 Y6
1 6 c 94 48 74
2 5 f 54 25 78
3 1 e 80 27 89
4 9 y 16 37 93
5 9 x 15 14 79
当我尝试合并 df 和 a 时,我得到了这样的结果:
df2 <- merge(df,a, by.x = colnames(df[,1:3]), by.y=colnames(df[,1:3]), all=TRUE)
> df2
X1 X2 X3 Y4 Y5.x Y6.x Y7 Y8 Y9 Y10 Y5.y Y6.y
1 1 e 80 NA NA NA NA NA NA NA 27 89
2 4 w 47 NA NA NA NA NA NA NA NA NA
3 5 f 54 NA NA NA NA NA NA NA 25 78
4 6 c 94 NA NA NA NA NA NA NA 48 74
5 6 s 54 NA NA NA NA NA NA NA NA NA
6 7 r 22 NA NA NA NA NA NA NA NA NA
7 9 f 78 NA NA NA NA NA NA NA NA NA
8 9 p 26 NA NA NA NA NA NA NA NA NA
9 9 x 15 NA NA NA NA NA NA NA 14 79
10 9 y 16 NA NA NA NA NA NA NA 37 93
为什么它不替换现有的 NA 而是创建新列?
重现性代码:
df <- data.frame(matrix(ncol = 10, nrow=0))
substr(colnames(df)[4:10],start=1,stop=1) <- "Y"
xy <- data.frame(X1 = sample(1:9,10, replace = TRUE),
X2 = sample(letters[1:25],10, replace = TRUE),
X3 = sample(11:99,10,replace = TRUE),
Y4 = sample(1:9,10,replace=TRUE),
Y5 = sample(10:49,10,replace=TRUE),
Y6 = sample(50:99,10,replace=TRUE),
Y7 = sample(100:199,10,replace=TRUE),
Y8 = sample(200:299,10,replace=TRUE),
Y9 = sample(300:399,10,replace=TRUE),
Y10 =sample(400:499,10,replace=TRUE))
df <- merge(df,xy[,1:3], by.x = colnames(xy[,1:3]), by.y=colnames(xy[,1:3]), all.y = TRUE)
a <- xy[1:5,c(1:3,5:6)]
b <- xy[3:7,c(1:3,7:8)]
c <- xy[8:10,c(1:3,9:10)]
【问题讨论】:
-
您是否想让 a、b、c 以某种方式合并并看起来像 df ?
-
没错!但我只是从一个开始。
标签: r join merge data-manipulation