Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R dplyr统计时间序列数据中单独事件的发生次数_R_Count_Dplyr - Fatal编程技术网

R dplyr统计时间序列数据中单独事件的发生次数

R dplyr统计时间序列数据中单独事件的发生次数,r,count,dplyr,R,Count,Dplyr,我对dplyr有点不在行,我知道这很容易解决。我有某些事件的数据,“X”、“Y”和“Z”,以及这些事件发生的日期列表。可通过以下方式生成示例: days.14<-seq(as.Date("2014/1/1"),as.Date("2014/12/31"),by="days") X<-c("X","") Y<-c("Y","") Z<-c("Z","") data<-as.data.frame(sample(days.14,200,replace=TRUE)) data

我对dplyr有点不在行,我知道这很容易解决。我有某些事件的数据,“X”、“Y”和“Z”,以及这些事件发生的日期列表。可通过以下方式生成示例:

days.14<-seq(as.Date("2014/1/1"),as.Date("2014/12/31"),by="days")
X<-c("X","")
Y<-c("Y","")
Z<-c("Z","")
data<-as.data.frame(sample(days.14,200,replace=TRUE))
data$X<-sample(X,200,replace=TRUE)
data$Y<-sample(Y,200,replace=TRUE)
data$Z<-sample(Z,200,replace=TRUE)
names(data)[1]<-"date"
data<-data[order(as.Date(data$date, format="%Y-%m-%d")),]
我正在尝试使用dplyr获得:

  date        X Y Z
--------------------
2014-01-01    1 1 2
2014-01-01    1 1 1
我用来实现这一点的代码不适用于字符向量

counts = data%>% group_by(factor(date))%>%
summarise(X=sum(X),
Y=sum(Y),
Z=sum(Z))

我通常通过table函数生成计数,但这对dplyr不起作用。

以下是使用ddply完成此任务的一种方法:

    ddply(data,.(date),function(x){
  xcount <- sum(grep("X",x$X))
  ycount <- sum(grep("Y",x$Y))
  zcount <- sum(grep("Z",x$Z))
  data.frame(X=xcount,Y=ycount,Z=zcount)
})
ddply(数据、日期)、函数(x){

xcount以下是使用ddply完成此任务的一种方法:

    ddply(data,.(date),function(x){
  xcount <- sum(grep("X",x$X))
  ycount <- sum(grep("Y",x$Y))
  zcount <- sum(grep("Z",x$Z))
  data.frame(X=xcount,Y=ycount,Z=zcount)
})
ddply(数据、日期)、函数(x){

xcount以下是我的做法:

library(dplyr)
data %>% group_by(date) %>%
         summarise_each(funs(sum(.!="")), -date)
为完整起见,请使用@David Arenburg的data.table解决方案:

library(data.table) 
setDT(data)[, lapply(.SD, function(x) sum(x != "")), by = date]
您的问题是,您试图对该行求和,但由于该行不是数字,因此该行不起作用

您需要检查X、Y或Z是否不是
NA
在r中更广泛地用作空白)

我们可以使用
summary_each
在每行执行此操作,并使用
-date
确保不包括日期列

注意:如果您只是想修复代码,以下是最简单的解决方案:

data %>% group_by(date)%>%
         summarise(X = sum(X == "X"),
                   Y = sum(Y == "Y"),
                   Z = sum(Z == "Z"))

我会这样做:

library(dplyr)
data %>% group_by(date) %>%
         summarise_each(funs(sum(.!="")), -date)
为完整起见,请使用@David Arenburg的data.table解决方案:

library(data.table) 
setDT(data)[, lapply(.SD, function(x) sum(x != "")), by = date]
您的问题是,您试图对该行求和,但由于该行不是数字,因此该行不起作用

您需要检查X、Y或Z是否不是
NA
在r中更广泛地用作空白)

我们可以使用
summary_each
在每行执行此操作,并使用
-date
确保不包括日期列

注意:如果您只是想修复代码,以下是最简单的解决方案:

data %>% group_by(date)%>%
         summarise(X = sum(X == "X"),
                   Y = sum(Y == "Y"),
                   Z = sum(Z == "Z"))
还有一条路

set.seed(1000)
days.14<-seq(as.Date("2014/1/1"),as.Date("2014/12/31"),by="days")
X<-c("X","")
Y<-c("Y","")
Z<-c("Z","")
data<-as.data.frame(sample(days.14,200,replace=TRUE))
data$X<-sample(X,200,replace=TRUE)
data$Y<-sample(Y,200,replace=TRUE)
data$Z<-sample(Z,200,replace=TRUE)
names(data)[1]<-"date"
data<-data[order(as.Date(data$date, format="%Y-%m-%d")),]
library(reshape2)
set.seed(1000)
第14天,另一种方法

set.seed(1000)
days.14<-seq(as.Date("2014/1/1"),as.Date("2014/12/31"),by="days")
X<-c("X","")
Y<-c("Y","")
Z<-c("Z","")
data<-as.data.frame(sample(days.14,200,replace=TRUE))
data$X<-sample(X,200,replace=TRUE)
data$Y<-sample(Y,200,replace=TRUE)
data$Z<-sample(Z,200,replace=TRUE)
names(data)[1]<-"date"
data<-data[order(as.Date(data$date, format="%Y-%m-%d")),]
library(reshape2)
set.seed(1000)

第14天另一个解决方案是
重铸
熔化
->
dcast
)数据


另一种解决方案是
重铸
熔化
->
dcast
)数据


在绘制随机样本之前,请使用
set.seed
构建示例。在绘制随机样本之前,请使用
set.seed
构建示例。