【问题标题】:R - subsetting data.frame in combinationar mannerR - 以组合方式子集data.frame
【发布时间】:2018-07-20 11:22:40
【问题描述】:

我有如下 data.frame:

Name Feature
A    1
B    2
C    4 
D    1
E    7 
F    5
G    2
H    2

我必须从这个数据系列中以组合方式创建具有三行的 data.frames。换句话说,我需要获得

subsetted_data.frame_1

Name Feature
A    1
B    2
C    4 

subsetted_data.frame_2

Name Feature
D    1
G    2
H    2

subsetted_data.frame_3

Name Feature
F    5
G    2
H    2

等等 - 最终创建所有可能的组合。我试图使用拆分功能(来自 data.table 包),但它不起作用。 Whis 是最简单的获得方法吗?

【问题讨论】:

标签: r


【解决方案1】:

您可以使用combn 获取索引矩阵,然后将它们作为参数传递给lapply 匿名函数。

cmb <- combn(nrow(dat), 3)

sub_data <- lapply(seq_len(ncol(cmb)), function(i) dat[cmb[, i], ])
names(sub_data) <- sprintf("subsetted_data.frame_%02d", seq_along(sub_data))

编辑。

根据@AkselA 的评论,我尝试了他的代码,如果在设置names 之前运行,就像上面的代码一样,这两个结果在identical 的意义上是相同的,也就是说,它们是完全相同的。

sub_data2 <- apply(cmb, 2, function(x) dat[x,])
identical(sub_data, sub_data2)
#[1] TRUE

DATA 采用dput 格式。

dat <-
structure(list(Name = structure(1:8, .Label = c("A", "B", "C", 
"D", "E", "F", "G", "H"), class = "factor"), Feature = c(1L, 
2L, 4L, 1L, 7L, 5L, 2L, 2L)), .Names = c("Name", "Feature"), class = "data.frame", row.names = c(NA, 
-8L))

【讨论】:

  • 不太值得单独回答,但您的lapply() 行更简洁的替代方案是:sub_data &lt;- apply(cmb, 2, function(x) dat[x,])
  • @AkselA 谢谢,我已经用你的代码编辑了答案。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多