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