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
想要计算数据框中变量的出现次数。在 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