我有一个由a组成的数据帧ID,对于组中的每个元素都是相同的,两个日期时间和这两者之间的时间间隔.其中一个日期时间对象是我的相关时间标记.现在我想获得数据帧的子集,其中包含每个组的最早条目.条目(尤其是时间间隔)需要保持不变.
我的第一种方法是根据1. ID和2.相关日期时间对帧进行排序.但是,我无法返回每个新组的第一个条目.
然后我一直在查看函数aggregate()以及ddply()函数但是我找不到两个选项,只返回第一个条目而不将聚合函数应用于时间间隔值.
是否有(简单)方法来实现这一目标?
附加:也许我不清楚添加我的aggregate()和ddply()注释.我不一定需要聚合.鉴于数据框的排序方式是每个新组的第一行是我要查找的行,只需返回一个子集,其中每一行的ID都与之前的ID不同(即每个新组的起始行).
示例数据:
structure(list(ID = c(1454L, 1322L, 1454L, 1454L, 1855L, 1669L,
1727L, 1727L, 1488L), Line = structure(c(2L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L), .Label = c("A", "B", "C"), class = "factor"),
Start = structure(c(1357038060, 1357221074, 1357369644, 1357834170,
1357913412, 1358151763, 1358691675, 1358789411, 1359538400
), class = c("POSIXct", "POSIXt"), tzone = ""), End = structure(c(1357110430,
1357365312, 1357564413, 1358230679, 1357978810, 1358674600,
1358853933, 1359531923, 1359568151), class = c("POSIXct",
"POSIXt"), tzone = ""), …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据框:
structure(list(one = structure(1:4, .Label = c("a", "b", "c",
"d"), class = "factor"), two = c(2, 4, 7, 3), x.1 = c("x1a",
"x1b", "x1c", "x1d"), x.2 = c("x2a", "x2b", "x2c", "x2d"), x.3 = c("x3a",
"x3b", "x3c", "x3d"), y.1 = c(NA, "y1b", "y1c", NA), y.2 = c(NA,
"y2b", "y2c", NA), y.3 = c(NA, "y3b", "y3c", NA)), .Names = c("one",
"two", "x.1", "x.2", "x.3", "y.1", "y.2", "y.3"), row.names = c(NA,
-4L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
如您所见,每个事件a,b,c和d(变量"one")的观察结果存储为列,其中x和y定义单独的观察值,1,2和3定义变量.变量"two"在这里没有意义.
我喜欢重塑这个数据框,让它整洁,每个观察都有自己的行,每个变量都有自己的列.
最终数据框应如下所示:
structure(list(one = structure(c(1L, 2L, 2L, …Run Code Online (Sandbox Code Playgroud) 我有两个POSIXct类的datetime对象,如下所示:
> x = as.POSIXct('2013-03-31 01:39:42')
> y = as.POSIXct('2013-03-31 03:11:24')
Run Code Online (Sandbox Code Playgroud)
两个日期时间的时间差计算为31.7分钟(或1902秒).
> y - x
Time difference of 31.7 mins
Run Code Online (Sandbox Code Playgroud)
但是,这种情况下的时差为91.7分钟(或5502秒).有人可以向我解释这个错误吗?
情况:我有几个数据框,我喜欢将它们作为 CSV 文件导出到工作目录中以进行进一步处理。
目标:使用单个函数(批量导出)将工作区中的数据框集合作为 csv 文件导出到工作目录。
详情:
我的问题不是关于更改数据帧的内容,因此您可以使用 R 提供的任何示例数据进行复制。
我用于导出单个数据框的功能是
csvExport <- function(data, enc = 'utf8'){
name <- paste(deparse(substitute(data)), "csv", sep=".")
con <- file(name, encoding = enc)
write.csv(data, file = con, row.names=FALSE, quote = TRUE, sep = ";")
text<-"exported!"
print(paste(name, text, sep=" "))
}
Run Code Online (Sandbox Code Playgroud)
由于我不喜欢为每个数据框调用函数来显式导出,因此我正在寻找一种方法来导出数据框,方法是指出我喜欢导出的工作区中的哪些数据框:
export <- ls()[1:20]
Run Code Online (Sandbox Code Playgroud)
然后我尝试在上面的列表中使用这个函数(有一些 for 循环的变体):
multipleCSVExport <- function(export){
for (i in export){
csvExport(i)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法创建预期的结果。