如果一个列是一个因子,但数据框的每个子集都有不同的大小-可能一个子集有数千行,而另一个子集有数万或数十万行-使用df[sample(nrow(df, n),]进行的采样可能没有足够的行用于特定子集。采样的 Dataframe 将在ggplot 2中转换为抖动图,我希望每个方面都具有大致相同的样本大小。
df[sample(nrow(df, n),]
dffbzjpn1#
在base R中,你要找的是函数by。package:plyr中的-ply函数将完成类似的工作。它们更强大、更灵活,但使用起来有点麻烦,如果你已经非常熟悉基本的-apply函数,通常就不需要了。这里有一个问题。运行类似by(iris,iris$Species,function(d) sample(nrow(d)))或其等价物plyr,dlply(iris,.(Species),function(d) sample(nrow(d))),将给予你一个样本从每个子 Dataframe 的物种.但它将被索引的子 Dataframe ,而不是整个事情。这应该不是一个问题 * 如果 * 你设计你的数据结构正确。记住这一点,并相应地编写你的绘图脚本。我可能会创建一个类似于 Dataframe 列表的东西,我可以方便地将其转换为绘图每个方面,但从来没有人指责我是一个优秀的程序员。
by
package:plyr
ply
apply
by(iris,iris$Species,function(d) sample(nrow(d)))
plyr
dlply(iris,.(Species),function(d) sample(nrow(d)))
mzmfm0qo2#
使用@ssdecontrol的答案作为起点,我得出了:
ddply(iris, .(Species), function(d) { d[sample(nrow(d), pmin(nrow(d), 2000)),] })
字符串它将 Dataframe 按Species因子进行拆分,对每个子集进行采样,然后将其重新组合成一个 Dataframe 。我使用pmin(nrow(d), 2000)来避免cannot take a sample larger than the population消息。在这种情况下,iris不是最好的例子,它只包含150行,每个物种只有50行-但同样的逻辑被用于我最初的160万行数据框架,其中有一个子集少于2000行。
Species
pmin(nrow(d), 2000)
cannot take a sample larger than the population
iris
yxyvkwin3#
若要执行所有因子都表示的分层抽样,您可以使用dagr包中的group_by和sample_n:
set.seed(0) strat_iris <- iris %>% group_by(Species) %>% sample_n(5)
字符串在此示例中,您获得一个15行数据集样本,每个因子有5行。
3条答案
按热度按时间dffbzjpn1#
在base R中,你要找的是函数
by
。package:plyr
中的-ply
函数将完成类似的工作。它们更强大、更灵活,但使用起来有点麻烦,如果你已经非常熟悉基本的-apply
函数,通常就不需要了。这里有一个问题。运行类似
by(iris,iris$Species,function(d) sample(nrow(d)))
或其等价物plyr
,dlply(iris,.(Species),function(d) sample(nrow(d)))
,将给予你一个样本从每个子 Dataframe 的物种.但它将被索引的子 Dataframe ,而不是整个事情。这应该不是一个问题 * 如果 * 你设计你的数据结构正确。记住这一点,并相应地编写你的绘图脚本。我可能会创建一个类似于 Dataframe 列表的东西,我可以方便地将其转换为绘图每个方面,但从来没有人指责我是一个优秀的程序员。mzmfm0qo2#
使用@ssdecontrol的答案作为起点,我得出了:
字符串
它将 Dataframe 按
Species
因子进行拆分,对每个子集进行采样,然后将其重新组合成一个 Dataframe 。我使用
pmin(nrow(d), 2000)
来避免cannot take a sample larger than the population
消息。在这种情况下,
iris
不是最好的例子,它只包含150行,每个物种只有50行-但同样的逻辑被用于我最初的160万行数据框架,其中有一个子集少于2000行。yxyvkwin3#
若要执行所有因子都表示的分层抽样,您可以使用dagr包中的group_by和sample_n:
字符串
在此示例中,您获得一个15行数据集样本,每个因子有5行。