【问题标题】:R - ddply summarise using nlevels() does not workR - ddply 使用 nlevels() 总结不起作用
【发布时间】:2015-06-22 14:56:23
【问题描述】:

在使用 plyr 包汇总我的数据时,似乎无法使用 nlevels() 函数。

我的数据集结构如下:

>aer <- read.xlsx("XXXX.xlsx", sheetIndex=1)
>aer$ID <- as.factor(aer$ID)
>aer$description <- as.factor(aer$description)    
>head(aer)

  ID SOC   start        end         days  count severity relation
1  1 410   2015-04-21   2015-04-28    7     1        1        3
2  1 500   2015-01-30   2015-05-04   94     1        1        3
3  1 600   2014-11-25   2014-11-29    4     1        1        3
4  1 600   2015-01-02   2015-01-07    5     1        1        3
5  1 600   2015-01-26   2015-03-02   35     1        1        3
6  1 600   2015-04-14   2015-04-17    3     1        1        3

> dput(head(aer,4))
structure(list(ID = structure(c(1L, 1L, 1L, 1L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "12", "13", "14", 
"15"), class = "factor"), SOC = c(410, 500, 600, 600),  
start = structure(c(16546, 16465, 16399, 16437), class = "Date"), 
end = structure(c(16553, 16559, 16403, 16442), class = "Date"), 
days = c(7, 94, 4, 5), count = c(1, 1, 1, 1), severity = c(1, 
1, 1, 1), relation = c(3, 3, 3, 3)), .Names = c("ID", "SOC", 
"description", "start", "end", "days", "count", "severity", "relation"
), row.names = c(NA, 4L), class = "data.frame")

我想知道的是,在使用变量“SOC”划分数据集时,创建的数据部分的“ID”变量中存在多少级别。我想总结一下这些信息以及新数据集中的一些其他变量。因此,我想像这样使用 plyr 包:

summaer2 <- ddply(aer, c("SOC"), summarise,
    participants    = nlevels(ID), 
    events          = sum(count),
    min_duration    = min(days), 
    max_duration    = max(days),
    max_severity    = max(severity))

这会返回以下错误:

Error in Summary.factor(c(4L, 5L, 11L, 11L, 14L, 14L), na.rm = FALSE) : 
‘max’ not meaningful for factors

有人可以就如何实现我的目标给我建议吗?还是我做错了什么?

非常感谢!

【问题讨论】:

  • 您确定nlevels() 是问题所在吗?好像它在抱怨max(),你确定daysseverity 是数字吗?您应该在reproducible format(即dput())中分享您的输入数据,以便我们了解您是如何输入数据的。
  • @MrFlick 我已经用 length() 替换了 nlevels(),然后它工作正常。 (但我不知道我的水平,只是数据部分的长度...... :))
  • @Veerendra Gadekar max(levels(ID) 为每个数据部分提供了相同的数字,这是不正确的。不过不会给我一个错误。
  • 我想我找到了解决方案:将nlevels(ID) 替换为length(unique(ID)) 给出了每个部分的级别数...
  • @Veerendra Gadekar max(as.vector(severity)) 也给了我不正确的值

标签: r plyr levels summarization


【解决方案1】:

更新:

length(unique(ID)) 替换nlevels(ID) 似乎给了我想要的输出:

> head(summaer2)
   SOC participants events min_duration max_duration max_severity
1  100            4      7            1           62            2
2  410            9     16            1           41            2
3  431            2      2          109          132            1
4  500            5      9           23          125            2
5  600            8     19            1           35            1
6 1040            1      1           98           98            2

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多