Stata做得很好的一件事就是它构造新变量的方式(见下面的例子).在R中如何做到这一点?
foreach i in A B C D {
forval n=1990/2000 {
local m = 'n'-1
# create new columns from existing ones on-the-fly
generate pop'i''n' = pop'i''m' * (1 + trend'n')
}
}
Run Code Online (Sandbox Code Playgroud) 我想找出每个分组变量的十分位数.我正在寻找使用dplyr和的方法lapply.如果你能帮助我,我会很感激.
这是我的尝试.除了调用之外我不知道如何直接拉十分位数dplyr::ntile()(这对我不起作用)
尝试1
这是我尝试使用describe()的Hmisc包:
set.seed(10)
IData <- data.frame(let = sample( x = LETTERS, size = 10000, replace=TRUE), numbers = sample(x = c(1:20000),size = 10000))
Output<-IData %>% data.table::as.data.table(.) %>% split(.,by=c("let"),drop = TRUE,sorted = TRUE) %>% purrr::map(~describe(.$numbers))
Run Code Online (Sandbox Code Playgroud)
这肯定有帮助,但上面的代码存在两个问题:
a)输出(甚至列表格式)不是我要找的东西.
b)我真的不知道如何从上面的列表中提取5%,10%....
底线是我被卡住了
尝试2
我试图取代describe通过ntile,但下面的代码给了我一个输出,并没有任何意义,我因为列数不10.在运行Output[[1]],我看看〜400个的数字,而不是10的载体.
Output<-IData %>% data.table::as.data.table(.) %>% split(.,by=c("let"),drop = TRUE,sorted = TRUE) %>% purrr::map(~dplyr::ntile(.$numbers,10))
Run Code Online (Sandbox Code Playgroud)
尝试3 = 预期输出
最后,我尝试去旧学校(即复制粘贴)以获得预期的输出:
Output<-IData %>%
dplyr::group_by(let) %>%
dplyr::summarise( QQuantile1 = quantile(`numbers`, …Run Code Online (Sandbox Code Playgroud)