R,计算像Excel PivotTable这样的变量的出现次数

问题描述 投票:1回答:2

想要计算数据框中变量的出现次数。在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可以很容易地像这样:

enter image description here

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

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
2个回答
2
投票

我们可以使用正则表达式删除时间组件(首选方法是使用Date转换为as.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'


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
© www.soinside.com 2019 - 2024. All rights reserved.