給定以下資料框:
set.seed(1)
df <- data.frame(rnorm(600))
我想從中抽取每組五人的子集。本質上,將資料集切成兩半,使 n = 300。一種方法如下:
subset.df <- data.frame(df$rnorm.600.[c(1:5, 11:15, 21:25, 31:35, 41:45, 51:55, 61:65, 71:75, 81:85, 91:95, 101:105, 111:115, 121:125, 131:135, 141:145, 151:155, 161:165, 171:175, 181:185, 191:195, 201:205, 211:215, 221:225, 231:235, 241:245, 251:255, 261:265, 271:275, 281:285, 291:295, 301:305, 311:315, 321:325, 331:335, 341:345, 351:355, 361:365, 371:375, 381:385, 391:395, 401:405, 411:415, 421:425, 431:435, 441:445, 451:455, 461:465, 471:475, 481:485, 491:495, 501:505, 511:515, 521:525, 531:535, 541:545, 551:555, 561:565, 571:575, 581:585, 591:595)])
但是,這段代碼非常繁瑣。有沒有可以更有效地做到這一點的功能?感謝您的任何幫助!
uj5u.com熱心網友回復:
您可以在索引中使用一些模塊化數學:
df[((seq(nrow(df)) - 1) %% 10) < 5,]
uj5u.com熱心網友回復:
df[c(rep(TRUE, 5), rep(FALSE,5)),]
這通過創建 5 TRUE 然后是 5 FALSE 的交替模式來作業,R 將其回圈到資料的長度。然后我們使用這些值來包括或排除這些行,因為df[ROWS_I_WANT,]將包括所有ROWS_I_WANT和所有列。
uj5u.com熱心網友回復:
您可以將資料框拆分為一個串列:
df_list <- slit(df, gl(2, 5, nrow(df))
然后選擇所需的子集:
df_list[[1]]
uj5u.com熱心網友回復:
我們可以通過subset這種方式在基礎 R中使用:
subset(df$rnorm.600., rep(0:1, times=nrow(df)/10, each=5) == 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325690.html
上一篇:使用運算式選擇包`gt`中的行
下一篇:如何生成函式的引數
