小编nsD*_*Sci的帖子

在R中的data.table中创建复合/交互虚拟变量

还在学习这个很棒的包data.table.我正在处理以下data.table:

demo <- data.table(id = c(1, 2, 3, 4, 5, 6), sex = c(1, 2, 1, 2, 2, 2), agef = c(43, 53, 63, 73, 83, 103))

demo: 
id sex agef
 1  1   43
 2  2   53
 3  1   63
 4  2   73
 5  2   83
 6  2   103
Run Code Online (Sandbox Code Playgroud)

我正在尝试生成新列(age_gender band)为("F0_34","F35_44","F45_54","F55_59"........"F95_GT")和("M0_34","M35_44", "M45_54","M55_59"........"M95_GT")基于列性和agef的值,将生成它们的名称和值.我能够以一种简单的方式做到:

demo <- demo[ ,F0_34:= {ifelse((sex==2) & (agef >= 0) & (agef <= 34), 1, 0)}]
Run Code Online (Sandbox Code Playgroud)

但我正在为此寻找一个优雅的解决方案,我试图将age_band作为lapply函数中的列表传递,如下所示:

i <- list("0_34","35_44","45_54","55_59","60_64","65_69","70_74","75_79","80_84","85_89","90_94","95_GT") 

demo[, paste0("F", i) := lapply(i, function(i)lapply(.SD, function(x){
l1 <- …
Run Code Online (Sandbox Code Playgroud)

r data.table

5
推荐指数
1
解决办法
209
查看次数

如何使用R中data.table中组内的最后一行进行一些计算?

我有这个data.table:

样品:

id cond date
1  A1   2012-11-19
1  A1   2013-05-09
1  A2   2014-09-05
2  B1   2015-03-05
2  B1   2015-07-06
3  A1   2015-02-05
4  B1   2012-09-26
4  B1   2015-02-05
5  B1   2012-09-26
Run Code Online (Sandbox Code Playgroud)

我想从今天的'id'和'cond'组中计算从今天开始的过期天数,所以我试图得到每组中最后一个日期和sys.date之间的天数差异.期望的输出是;

id cond date        overdue
1  A1   2012-11-19  NA
1  A1   2013-05-09  832 
1  A2   2014-09-05  348
2  B1   2015-03-05  NA 
2  B1   2015-07-06  44
3  A1   2015-02-05  195
4  B1   2012-09-26  NA 
4  B1   2015-02-05  195
5  B1   2012-09-26  1057
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下代码实现此目的:

sample <- sample[ , overdue := …
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
280
查看次数

标签 统计

data.table ×2

r ×2