我有为数据集中的每个单独的ID创建的rle()类对象,现在我想将它们绘制在单独的直方图中,这些直方图显示各种长度类的频率,以便获得它们的分布图,但我可以'似乎弄清楚如何做到这一点.
我通过使用以下代码对具有各种ID的数据运行rle()函数来获取rle()类对象的列表:
list.runs<-dlply(data.1, .(ID), function(x) rle(x$flights))
Run Code Online (Sandbox Code Playgroud)
但是这使得无法将数据传输到数据帧中,因为rle()对象无法强制转换为数据帧.所以我把它们解开了:
list.runs<-dlply(data.1, .(ID), function(x) unclass(rle(x$flights)))
Run Code Online (Sandbox Code Playgroud)
但我无法将这些数据放在数据框中,因为列表的长度不同.
runs<-ldply(do.call(data.frame,list.runs))
Error in function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 14, 13
Run Code Online (Sandbox Code Playgroud)
问题:如何绘制每个单独ID的长度值的直方图?
数据(简化):
> dput(data.1)
structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, …Run Code Online (Sandbox Code Playgroud) 我有以下数据:
measurement <- c(1:30)
angle <- rnorm(30, 0, 0.4)
data.1 <- data.frame(measurement, angle)
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数,为四种不同的场景返回一个TRUE值:
1. When 'angle' > 0.3
or 2. When 'angle' < -0.3
or 3. When 'angle' + the previous 'angle' > 0.3
or 4. When 'angle' + the previous 'angle' < -0.3
Run Code Online (Sandbox Code Playgroud)
我尝试了一个for循环,我已经尝试了以下方式,但我只是不知道如何包括角度和角度的总和,这是一个时间步骤提前测量(所以我是什么在这里做错了但是我怎么能改进呢?最好是在计算上最不费劲的方式,因为我使用海量数据集):
n<-data.1$angle
function1 <- function(n){
return(n>0.3 | n<(-0.3) | (n+(n-1))>(0.3) | (n+(n-1))<(-0.3))
}
Run Code Online (Sandbox Code Playgroud)
很抱歉作为R新手,但在漫步R文件的迷宫后,我没有别的办法,只能在这里问一下.谢谢你的帮助!