使用索引根据列中的唯一值对数据框进行子集化

Use index to subset dataframe based on unique values in a column

我有一个包含大量样本 ID 的大型数据集。一个非常简化的版本看起来像这样:

df <- data.frame(ID = rep(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), times = c(10, 4, 12, 19, 5, 22, 6, 7, 11, 4)),
                  Value = sample(x = 20:30, size = 100, replace = T))

我想根据 ID 将我的大型数据集拆分为多个较小的数据框,这样当我绘制数据时,我的图表不会变得太拥挤。在这个简化的示例中,我想将其拆分为两个 dataframes/plots,一个包含前 5 个唯一 ID (A-E) 的数据,另一个包含后 5 个唯一 ID (F-J) 的数据。我如何使用索引符号轻松地做到这一点(假设我有数百个 ID)?我下面的代码不起作用,我不知道它有什么问题:

subset.1 <- df[unique(df$ID)[1:5]]
subset.2 <- df[unique(df$ID)[6:10]]

您应该使用逻辑向量进行子集化:

df[df$ID %in% unique(df$ID)[1:5], ]
df[df$ID %in% unique(df$ID)[6:10], ]

您还可以使用 splitcut 将您的数据框按组拆分为 n 个数据集(此处为 2)。

split(df, cut(as.numeric(as.factor(df$ID)), 2))