R:从钻石数据集中的每个切割质量中抽取100个随机价格?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我正在使用钻石数据集:

install.packages("ggplot2")
library(ggplot2)
data("diamonds")

而且我必须制作一个数据框,从每个切割质量(公平,良好,非常好,高级,理想)中随机获得100个价格,这将给我500个数据点。到达那里我遇到了一些麻烦,非常感谢任何帮助!这是我尝试的公式,但我似乎无法弄清楚如何包含所有属于'cut'的子集。

diamonds$price[ sample( diamonds$cut, size=100, replace=FALSE )]

我也试过使用聚合函数,但这似乎让我离我应该去的地方更远。我确定我只是错过了一些相当明显的东西,但我对此很新,我在网上找不到任何关于它的东西。谢谢!

感谢Camille,我能够做到:

 Test.1<-diamonds %>%
      group_by(cut) %>%
      sample_n(size = 100) %>%
      count(price)

我现在似乎无法使用数据,因为我需要找到每个切割质量的平均标准偏差等。

提问于
用户回答回答于

您可以使用split-apply-combine逻辑来完成。

library(ggplot2)
data(diamonds)

head(diamonds)

xy <- split(diamonds, f = diamonds$cut)

xy <- lapply(xy, FUN = function(x) {
  x[sample(1:nrow(x), 100), ]
})

xy <- do.call(rbind, xy)
table(xy$cut)

 Fair      Good Very Good   Premium     Ideal 
  100       100       100       100       100 
用户回答回答于

不需要变得更复杂dplyrdplyr::sample_n可以对分组的数据帧进行操作,使得每组N个样本取自这些组中的一个。

library(dplyr)
library(ggplot2)

diamonds %>%
  group_by(cut) %>%
  sample_n(size = 100)
#> # A tibble: 500 x 10
#> # Groups:   cut [5]
#>    carat cut   color clarity depth table price     x     y     z
#>    <dbl> <ord> <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#>  1  0.7  Fair  D     SI2      65.6    55  2167  5.59  5.5   3.64
#>  2  1.01 Fair  E     SI1      64.8    58  4480  6.34  6.29  4.09
#>  3  0.7  Fair  G     VS1      65.2    57  2290  5.56  5.52  3.61
#>  4  0.7  Fair  F     I1       65.4    59   992  5.6   5.49  3.63
#>  5  1    Fair  G     SI1      63.1    59  4163  6.32  6.27  3.97
#>  6  2.01 Fair  E     SI2      62.1    66 14948  7.99  7.92  4.94
#>  7  0.7  Fair  G     VS1      56.2    65  2384  5.93  5.88  3.32
#>  8  0.7  Fair  I     VS1      60.2    66  2234  5.77  5.62  3.44
#>  9  0.7  Fair  G     VS2      66.5    57  2575  5.4   5.46  3.61
#> 10  1.13 Fair  F     VS1      64.5    55  7335  6.62  6.56  4.25
#> # … with 490 more rows

核实:

diamonds %>%
  group_by(cut) %>%
  sample_n(size = 100) %>%
  count(cut)
#> # A tibble: 5 x 2
#> # Groups:   cut [5]
#>   cut           n
#>   <ord>     <int>
#> 1 Fair        100
#> 2 Good        100
#> 3 Very Good   100
#> 4 Premium     100
#> 5 Ideal       100

reprex包创建于2019-02-21 (v0.2.1)

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问5 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    2 粉丝477 提问3 回答
  • 军哥

    重庆雷驰信息技术有限公司 · 经理 (已认证)

    5 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券