从数据框的一列子集模式系列
Subset a patterned series from one column of a dataframe
给定以下数据框:
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)])
但是,这段代码非常繁琐。有没有可以更有效地做到这一点的功能?感谢您的帮助!
您可以在索引中使用一些模块化数学:
df[((seq(nrow(df)) - 1) %% 10) < 5,]
df[c(rep(TRUE, 5), rep(FALSE,5)),]
这是通过创建 5 个 TRUE 和 5 个 FALSE 的交替模式来实现的,R 将其循环到数据的长度。然后我们使用这些值来包含或排除这些行,因为 df[ROWS_I_WANT,]
将包含所有 ROWS_I_WANT
和所有列。
您可以将数据框拆分成一个列表:
df_list <- slit(df, gl(2, 5, nrow(df))
您然后 select 您想要的子集:
df_list[[1]]
我们可以这样在基础 R subset
中使用:
subset(df$rnorm.600., rep(0:1, times=nrow(df)/10, each=5) == 0)
给定以下数据框:
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)])
但是,这段代码非常繁琐。有没有可以更有效地做到这一点的功能?感谢您的帮助!
您可以在索引中使用一些模块化数学:
df[((seq(nrow(df)) - 1) %% 10) < 5,]
df[c(rep(TRUE, 5), rep(FALSE,5)),]
这是通过创建 5 个 TRUE 和 5 个 FALSE 的交替模式来实现的,R 将其循环到数据的长度。然后我们使用这些值来包含或排除这些行,因为 df[ROWS_I_WANT,]
将包含所有 ROWS_I_WANT
和所有列。
您可以将数据框拆分成一个列表:
df_list <- slit(df, gl(2, 5, nrow(df))
您然后 select 您想要的子集:
df_list[[1]]
我们可以这样在基础 R subset
中使用:
subset(df$rnorm.600., rep(0:1, times=nrow(df)/10, each=5) == 0)