首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用with = FALSE和.SD对.SD行进行子集

使用with = FALSE和.SD对.SD行进行子集
EN

Stack Overflow用户
提问于 2016-11-01 23:58:24
回答 2查看 134关注 0票数 0

我有一个具有多个变量的data.table,这些变量的值有限。对于每个变量,我想要构建一个表来计算具有每个值的观测值的分数,并进行分组。

示例数据:

代码语言:javascript
复制
data = data.table(group = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3), 
                  Var1 =  c(1,1,2,2,3,1,2,3,2,2,3,1,2,3,1), 
                  Var2 =  c(1,1,2,3,2,2,2,2,1,2,3,2,1,1,3))

我想要两张表:

代码语言:javascript
复制
Var1:
group | Var1_1  | Var1_2  | Var1_3
------|---------|---------|---------
1     | .4      | .4      | .2
2     | .2      | .6      | .2
3     | .4      | .2      | .4

Var2也是如此。对于单个变量来说,这很简单:

代码语言:javascript
复制
data[, .(Var1_1 = .SD[Var1 == 1, .N]/.N, 
         Var1_2 = .SD[Var1 == 2, .N]/.N,
         Var1_3 = .SD[Var1 == 3, .N]/.N), by = group, .SDcols = "Var1"]

但是由于我有很多变量,所以我想在一个循环中这样做。我曾在外部调用和.SD调用中使用过with = FALSE,但没有能够正确地使用它。理想情况下,我可以将列名传递给.SDi子集.SDcols,并在理想情况下作为参数传递给paste0()以创建输出变量名(例如paste0(varName, "_1"))。

代码语言:javascript
复制
variables <- c("Var1", "Var2")
for(variable in variables) {
    data[...what should go here?...]
}

对如何做到这一点有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-02 00:09:30

tableprop.table通常可以方便地构造这样的比例表。

代码语言:javascript
复制
lapply(variables, function(var) data[, prop.table(table(group, get(var)), margin = 1)])

#[[1]]

#group   1   2   3
#    1 0.4 0.4 0.2
#    2 0.2 0.6 0.2
#    3 0.4 0.2 0.4

#[[2]]

#group   1   2   3
#    1 0.4 0.4 0.2
#    2 0.2 0.8 0.0
#    3 0.4 0.2 0.4
票数 1
EN

Stack Overflow用户

发布于 2016-11-02 01:15:37

我们也可以使用来自dcastdata.table来实现这一点。

代码语言:javascript
复制
lapply(variables, function(x) dcast(data[, .N , c('group', x)][, 
     Perc := N/sum(N), group][, N := NULL], group~..., value.var = "Perc", fill = 0))
#[[1]]
#   group   1   2   3
#1:     1 0.4 0.4 0.2
#2:     2 0.2 0.6 0.2
#3:     3 0.4 0.2 0.4

#[[2]]
#   group   1   2   3
#1:     1 0.4 0.4 0.2
#2:     2 0.2 0.8 0.0
#3:     3 0.4 0.2 0.4
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40370438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档