R,统计一个变量出现的次数,比如Excel数据透视表

R, count the occurrence of a variable like Excel PivotTable

想要计算数据框中变量的出现次数。在 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 数据透视表的输出的方法是什么?谢谢。

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

转换为 Date class
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'

最难的部分就是从列中取出日期部分。

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