【问题标题】:combine rows from two dataframes on the nth row r在第 n 行 r 上合并来自两个数据帧的行
【发布时间】:2015-10-29 14:16:10
【问题描述】:

我想为 df1 中的每隔一行合并两个数据帧我想从 df2 插入两行。

df1:

Chr     Start       End nProbes nA nB loss gain amp cnloh
23    168477   2693175     429  1  1    0    0   0     0
23   2693624  58561930   33605  1  0    1    0   0     0
23  61728829 154973412   50990  0  0    1    0   0     0
23 154977448 155233846      31  1  1    0    0   0     0

df2:

Chr     Start       End nProbes nA nB loss gain amp cnloh
23   2693175   2694073   33605  1  1    1    0   0     0
23   2694073   2693624   33605  1  1    1    0   0     0
23  58561930  64895728   50990  1  0    1    0   0     0
23  64895728  61728829   50990  1  0    1    0   0     0
23 154973412 154981484      31  0  0    0    0   0     0
23 154981484 154977448      31  0  0    0    0   0     0

输出:

Chr     Start       End nProbes nA nB loss gain amp cnloh
23    168477   2693175     429  1  1    0    0   0     0
23   2693175   2694073   33605  1  1    1    0   0     0
23   2694073   2693624   33605  1  1    1    0   0     0
23   2693624  58561930   33605  1  0    1    0   0     0
23  58561930  64895728   50990  1  0    1    0   0     0
23  64895728  61728829   50990  1  0    1    0   0     0
23  61728829 154973412   50990  0  0    1    0   0     0
23 154973412 154981484      31  0  0    0    0   0     0
23 154981484 154977448      31  0  0    0    0   0     0
23 154977448 155233846      31  1  1    0    0   0     0

【问题讨论】:

  • 您能否提供一些易于复制/粘贴的模拟数据以及您迄今为止尝试过的数据?

标签: r merge


【解决方案1】:

可能是这样的:

#create an id column for both dfs
#this id will dictate the order of rows
df1$id <- 1:nrow(df1)
df2$id <- rep(1:(nrow(df2)/2),each=2)

#rbind the two data.frames
df3 <- rbind(df1, df2)
#and now just order based on their ids
df3 <- df3[order(df3$id), ]

输出:

> df3
   Chr     Start       End nProbes nA nB loss gain amp cnloh id
1   23    168477   2693175     429  1  1    0    0   0     0  1
5   23   2693175   2694073   33605  1  1    1    0   0     0  1
6   23   2694073   2693624   33605  1  1    1    0   0     0  1
2   23   2693624  58561930   33605  1  0    1    0   0     0  2
7   23  58561930  64895728   50990  1  0    1    0   0     0  2
8   23  64895728  61728829   50990  1  0    1    0   0     0  2
3   23  61728829 154973412   50990  0  0    1    0   0     0  3
9   23 154973412 154981484      31  0  0    0    0   0     0  3
10  23 154981484 154977448      31  0  0    0    0   0     0  3
4   23 154977448 155233846      31  1  1    0    0   0     0  4

然后您可以使用df3$id &lt;- NULL 轻松删除 id 列。

【讨论】:

    【解决方案2】:

    rbind(df1, df2) 如果两个数据框具有相同的列名,则会执行此操作。 之后您可以通过重复删除双行。

    newdf <- rbind(df1, df2)
    newdf <- newdf[duplicated(newdf) == FALSE, ]
    

    问候, 弗洛里安

    【讨论】:

    • 我应该用真实数据编辑这个!没有类似的变量名。
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2014-04-14
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多