【问题标题】:R, count the occurrence of a variable like Excel PivotTableR,计算诸如Excel数据透视表之类的变量的出现次数
【发布时间】:2018-03-04 11:05:36
【问题描述】:

想要计算数据框中变量的出现次数。在 Excel 数据透视表中很容易做到,现在学习如何在 R 中做到这一点。

      v_time visitor
1/2/2018 16:07    Jack
1/3/2018 16:09    Jack
1/3/2018 16:12   David
1/3/2018 16:16    Kate
1/2/2018 16:21   David
1/2/2018 16:32    Jack
1/4/2018 16:33    Kate
1/4/2018 16:55    Jack

Excel 可以这样轻松搞定:

我已经尝试了一些线路,但仍然没有到达那里。

visitor <- c("Jack", "Jack", "David", "Kate", "David", "Jack", "Kate", "Jack")
v_time <- c("1/2/2018 16:07","1/3/2018 16:09","1/3/2018 16:12","1/3/2018 16:16","1/2/2018 16:21","1/2/2018 16:32","1/4/2018 16:33", "1/4/2018 16:55")
df <- data.frame(v_time, visitor)

as.Date(as.POSIXct(df$v_time, "%m/%d/%Y"))

library(plyr)
count(df$visitor, 'v_time')

as.data.frame(table(df$visitor))

在 R 中生成类似 Excel 数据透视表的输出的方法是什么?谢谢。

【问题讨论】:

标签: r dataframe reshape


【解决方案1】:

最困难的部分是从列中取出日组件。

library(data.table)
dcast(setDT(df)[, day := sub(" .*$", "", v_time)], visitor ~ day, fun.aggregate = length)
#> Using 'day' as value column. Use 'value.var' to override
#>    visitor 1/2/2018 1/3/2018 1/4/2018
#> 1:   David        1        1        0
#> 2:    Jack        2        1        1
#> 3:    Kate        0        1        1

【讨论】:

    【解决方案2】:

    我们可以使用任一正则表达式删除时间组件(首选方法是使用as.Date 转换为Date

    df$v_time <- sub("\\s+.*", "", df$v_time)
    

    或者

    df$v_time <- as.Date(df$v_time, "%m/%d/%Y")
    

    然后执行table

    as.data.frame.matrix(table(df[2:1]))
    

    如果我们在两个边距上都需要sum,请使用addmargins

    addmargins(table(df[2:1]))
    

    OP的代码不工作的原因是转换为Date后,它没有分配给'v_time'

    【讨论】:

    • 感谢您的帮助。是否也可以显示列和行的总和?
    • @MarkK 谢谢,更新了帖子。祝你周末愉快
    • 太棒了!简单、直接、高效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多