R 转换数据帧,使多个重叠列形成一个单一比例?

R 转换数据帧,使多个重叠列形成一个单一比例?,r,dataframe,match,R,Dataframe,Match,假设我有一个数据帧,如下所示(实际上是多个数据帧绑定): (抱歉,如果我自己发布数据格式,则会被标记。) 我怎样才能转换它,使我有一个指示“位置”的统一系统?ie是下面两种格式之一 单列刻度: position colb colc colb.1 colc.1 1 NA NA NA NA 2 NA NA 1 4 3 1 4 NA NA 4

假设我有一个数据帧,如下所示(实际上是多个数据帧绑定):

(抱歉,如果我自己发布数据格式,则会被标记。)

我怎样才能转换它,使我有一个指示“位置”的统一系统?ie是下面两种格式之一

单列刻度:

position    colb colc   colb.1 colc.1
1            NA  NA      NA     NA
2            NA  NA      1      4
3            1    4      NA     NA
4            3    6      NA     NA
5            NA   NA     NA     NA
6            NA   NA     NA     NA
7            8    9      3      6
8            NA   NA     8      9
9            NA   NA     NA     NA
10           NA   NA     1      4
11           NA   NA     3      6
12           2    5      8      9
13           NA   NA     NA     NA
14           NA   NA     NA     NA
15           NA   NA     1      4
16           NA   NA     3      6
17           NA   NA     NA     NA
18           NA   NA     NA     NA
19           NA   NA     8      9
20           NA   NA     NA     NA
21           NA   NA     1      4
22           NA   NA     NA     NA
23           NA   NA     NA     NA
24           NA   NA     3      6
25           NA   NA     NA     NA
26           NA   NA     8      9
或使用单独的列,但“匹配”:

position colb colc position.1 colb.1 colc.1
NA       NA   NA        NA      NA     NA
NA       NA   NA        2       3      6
3        1    4         NA      NA     NA
4        3    6         NA      NA     NA
NA       NA   NA        NA      NA     NA
NA       NA   NA        NA      NA     NA
7        8    9         7       1      4
NA       NA   NA        8       3      6
NA       NA   NA        NA      NA     NA
NA       NA   NA        10      1      4
NA       NA   NA        11      3      6
12       2   5          12      8      9
NA       NA   NA        NA      NA     NA
NA       NA   NA        NA      NA     NA
NA       NA   NA        15      8      9
NA       NA   NA        16      1      4
NA       NA   NA        NA      NA     NA
NA       NA   NA        NA      NA     NA
NA       NA   NA        19      1      4
NA       NA   NA        NA      NA     NA
NA       NA   NA        21      8      9
NA       NA   NA        NA      NA     NA
NA       NA   NA        NA      NA     NA
NA       NA   NA        24      8      9
NA       NA   NA        NA      NA     NA
NA       NA   NA        26      8      9

感谢您的帮助。谢谢。

如果
df
包含数据帧

df <- data.frame(
  position = c(3,4,7,12,NA,NA,NA,NA,NA,NA,NA,NA),
  colb = c(1,3,8,2,NA,NA,NA,NA,NA,NA,NA,NA),
  colc = c(4,6,9,5,NA,NA,NA,NA,NA,NA,NA,NA),
  position = c(2,7,8,10,11,12,15,16,19,21,24,26),
  colb = c(1,3,8),
  colc = c(4,6,9)
)

df1 <- df[,1:3]
df2 <- df[,4:6]

names(df2) <- c("position", "colb", "colc")

df_out <- rbind(df1, df2)

df_out <- df_out[!is.na(df_out$position),]
df_out <- df_out[order(df_out$position),]
df_out
df
df <- data.frame(
  position = c(3,4,7,12,NA,NA,NA,NA,NA,NA,NA,NA),
  colb = c(1,3,8,2,NA,NA,NA,NA,NA,NA,NA,NA),
  colc = c(4,6,9,5,NA,NA,NA,NA,NA,NA,NA,NA),
  position = c(2,7,8,10,11,12,15,16,19,21,24,26),
  colb = c(1,3,8),
  colc = c(4,6,9)
)

df1 <- df[,1:3]
df2 <- df[,4:6]

names(df2) <- c("position", "colb", "colc")

df_out <- rbind(df1, df2)

df_out <- df_out[!is.na(df_out$position),]
df_out <- df_out[order(df_out$position),]
df_out