繁体   English   中英

在 R 中,每隔 n 个值从一个数据帧插入到另一个数据帧

[英]Insert row every nth value from one dataframe to another in R

我正在尝试将许多行从一个数据帧插入到另一个数据帧。 我设法做到了一次,但我必须做同样的 3500 次。

我有以下两个具有相同标头的数据框:

具有 850561 行和 121 列的数据框 a

具有 854001 行和 121 列的数据框 b

我使用以下代码将一行从 b 插入到 a:

a <- rbind(a[1:244,],b[245],a[-(1:244),])

这非常有效,因为它在 a 的第 244 行和第 245 行之间插入了来自 b 的一行。

问题是我必须每 243 行都做同样的事情,例如下一个是这样的:

a <- rbind(a[246:489,],b[489],a[-(246:489),])

我尝试了以下 for 循环,但它不起作用:

i<-244
j<-1
for (val in a){
  a<-rbind(a[j:i,],b[i+1],a[-(j:i),])
  i<-i+243
  j<j+245
}

非常感谢您的帮助

一种可能的方法是将rbind(a,b)放入单个表中,并使用一个新变量,在排序时以正确的顺序给出行。

对于 a 的现有行,这个新变量将采用值1:(dim(a)[1]) ,然后对于b的行采用 245.5、489.5 等。 然后,如果我对其进行排序, b的行将出现在正确的位置。

(编辑:我刚刚意识到这与您的情况略有不同,但它应该很容易适应,您需要做的就是首先选择适当的b行)

这是一个玩具示例:

# Create a and b
a <- data.frame(x=runif(15),source="a")
b <- data.frame(x=runif(3),source="b")

# Suppose I want b interleaved with a, such that a row of b occurs every 5 rows of a:

a$sortorder <- 1:dim(a)[1]
b$sortorder <- (1:dim(b)[1])*5+0.5

dat <- rbind(a,b)
dat[order(dat$sortorder),-3]

            x source
1  0.10753897      a
2  0.24482683      a
3  0.72236241      a
4  0.03273494      a
5  0.54934999      a
16 0.20578103      b
6  0.68280868      a
7  0.30024090      a
8  0.38877446      a
9  0.73244615      a
10 0.96249642      a
17 0.13878037      b
11 0.76059617      a
12 0.58167316      a
13 0.46287299      a
14 0.35630962      a
15 0.38392182      a
18 0.38908214      b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM