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