【问题标题】:R counting a field in data.table [duplicate]R计算data.table中的一个字段[重复]
【发布时间】:2015-06-23 21:33:20
【问题描述】:

我有一个可以简化为这样的数据表:

set.seed(1); 
dt<-data.table(form=c(1,1,1,2,3,3,3,4,4,5),
    mx=c("a","b","c","d","e","f","g","e","g","b"),
    vr=runif(10,100,200),
    usr=c("l","l","l","m","o","o","o","l","l","m"),
    type=c("A","A","A","C","C","C","C","C","C","A"))

我可以生成一个表格:

dt[,
    list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr)),
    by=usr]

我无法计算 A 类型公式的数量(每一行都是一个观察值,form 是公式编号)。我试过了:

dt[,
    list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=sum(type=="A"),
    by=usr]

还有:

dt[,
    list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=length(unique(type=="A"))),
    by=usr]

但是这些都没有考虑到这样一个事实,即找到的“A”的数量需要与唯一的公式 (form) 数字相关。

我想要的结果是:

   usr n.form n.mx   tot.vr n.A
1:   l      2    5 750.0398   1
2:   m      2    2 296.9994   1
3:   o      1    3 504.4747   0

但我找不到实现它的方法。任何灯棚都非常感谢。 谢谢,

======= 编辑添加 ========

我想知道有多少公式(dt$form 中的唯一数字)属于“A”类型(这样我就可以计算出总公式的比例)。直接数 (sum) 是 A 类型的观察 的总数,而存在 (any) 给出了我是否存在至少一个“A”类型的公式,但不是该类型公式的数量(这是我想要的)。请注意,任何给定的公式总是属于“A”或“C”类型(不是在一个公式中混合类型)

【问题讨论】:

    标签: r data.table aggregate


    【解决方案1】:

    data.tabledevel版本中,可以使用uniqueN代替length(unique(..

    library(data.table)#v1.9.5+
    dt[,list(n.form=uniqueN(form), n.mx=uniqueN(mx),tot.vr=sum(vr),
                n.A=uniqueN(form[type=='A'])) , by = usr]
    #    usr n.form n.mx   tot.vr n.A
    #1:   l      2    5 750.0398   1
    #2:   m      2    2 296.9994   1
    #3:   o      1    3 504.4747   0
    

    【讨论】:

    • 您的代码在提供的数据上运行良好,但如果我引入此更改:dt$usr&lt;-c(dt$usr[1:9],"l") 那么它无法向n.A 添加额外的公式(form==5),现在应该显示2.
    • @PavoDive 我可能误解了你的问题。对不起。
    • @PavoDive 我更新了帖子。你现在可以检查结果吗?根据您更改的代码,n.A 将是 2 0 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2020-07-12
    相关资源
    最近更新 更多