簡體   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