簡體   English   中英

根據行對數據幀進行子集設置,具體取決於R中的列號

[英]Subsetting a data frame by rows, dependent on the column number in R

我想根據數據所在的列,通過不同的行計數將R中的數據幀子集化。例如,我們從以下數據幀開始:

df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))

df
  t1 t2 t3 t4 t5
1  1  4  7 12 18
2  2  5  8 13 19
3  3  6  9 14 20
4  4  7 10 15 21
5  5  8 11 16 22
6  6  9 12 17 23

現在,我想通過捕獲t1列的5:6行,t2列的4:5行,t3列的3:4行等來對數據幀進行子集化(例如,高1行的2個數據點集對於每一列,我們都會刪除),以便新的數據幀看起來像這樣:

df2
  t1 t2 t3 t4 t5
1  5  7  9 13 18
2  6  8 10 14 19

我的實際問題最多可以包含50列,所以我很希望能夠使用一個干凈,簡單的函數,並且確定該函數已經存在。

提前致謝。

您可以使用sapply ,例如:

df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))
m <-sapply(1:ncol(df), function(i){
  df[(6-i):(7-i),i]
  })
df2 <- data.frame(m)
colnames(df2) <- colnames(df)

你可以試試

n <- nrow(df)
s1 <- 1:ncol(df)
df2 <- as.data.frame(matrix(df[cbind(c(n-1, n) - rep((s1-1), each=2), 
         rep(s1,each=2))],ncol=ncol(df), dimnames=list(NULL, names(df))))
df2
#  t1 t2 t3 t4 t5
#1  5  7  9 13 18
#2  6  8 10 14 19

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM