[英]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.