【问题标题】:Creating random ratios that add up to 1 by group创建按组加起来为 1 的随机比率
【发布时间】:2020-10-19 14:44:41
【问题描述】:

我有一个数据集如下:

panelID= c(1:50)
year= c(2005, 2010)
country = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
urban = c("A", "B", "C")
indust = c("D", "E", "F")
sizes = c(1,2,3,4,5)
n <- 2
library(AER)
library(data.table)
library(dplyr)
set.seed(123)
DT <- data.table(   country = rep(sample(country, length(panelID), replace = T), each = n),
                    year = c(replicate(length(panelID), sample(year, n))),
                    sales= round(rnorm(10,10,10),2),
                    industry = rep(sample(indust, length(panelID), replace = T), each = n),
                    urbanisation = rep(sample(urban, length(panelID), replace = T), each = n),
                    size = rep(sample(sizes, length(panelID), replace = T), each = n))
DT <- DT %>%
group_by(country) %>%
mutate(base_rate = as.integer(runif(1, 12.5, 37.5))) %>%
group_by(country, year) %>%
mutate(taxrate = base_rate + as.integer(runif(1,-2.5,+2.5)))
DT <- DT %>%
group_by(country, year) %>%
mutate(vote = sample(c(0,1),1), 
votewon = ifelse(vote==1, sample(c(0,1),1),0))

我想向这个数据集添加一个名为ratio 的变量。我希望ratio 是介于 0 和 1 之间的随机数,并且我希望按国家/地区划分的这些比率的总和为 1。

我将如何创建这样一个专栏?我唯一能想到的就是手动创建加起来为 1 的向量,然后从这些向量中采样。

编辑:这些国家没有相等的条目:

> table(DT$country)

 A  B  C  D  E  F  G  H  I  J 
 6 10 14  6 14 10 10  8 10 12 

ratio_sample_6 <- c(0.1, 0.2, 0.3, 0.05, 0.15, 0.2)
DT[,ratio:=sample(ratio_sample_6, replace = FALSE), by="country"]

但即便如此,我也无法上班。有什么建议吗?

【问题讨论】:

  • ratio_sample_6 &lt;- sample(1000, 6); ratio_sample_6 &lt;- ratio_sample_6 /sum(ratio_sample_6)怎么样
  • 感谢您的回答艾伦。对不起,我应该补充的。并非每个国家/地区都包含相同数量的条目。见编辑。
  • 或者选择随机数并按国家标准化:DT[, ratio := runif(.N)][, ratio := ratio / (sum(ratio)), by = "country"]

标签: r random sample


【解决方案1】:

选择随机数并按国家标准化:

## data.table version
DT[, ratio := runif(.N)][, ratio := ratio / sum(ratio), by = "country"]

## dplyr version
DT %>% group_by(country) %>%
  mutate(
    ratio = runif(n()),
    ratio = ratio / sum(ratio)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2013-09-10
    • 2021-04-14
    • 2021-07-08
    • 2013-11-29
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多