【发布时间】:2016-03-07 02:36:52
【问题描述】:
我正在尝试将 diff() 应用于一系列包含日期的列。我对 date1-date2、date2-date3 等之间的区别感兴趣。
我有兴趣:
- 日期之间的实际差异(天)
- 如果一行的所有日期都按顺序排列(diff >= 0,按行)
我可以在一系列日期上使用 diff() (例如,在第一行 --> diff(unlist(df1[1,])) )。我只需要每行应用这个,我想使用apply(),但由于某种原因我无法解决。有些日期丢失了,这在我的研究中是允许的。
希望这对你们来说很容易......
df <- structure(list(date1 = structure(c(-10871, -13634, -15937, -15937,
-290, -2323), class = "Date"), date2 = structure(c(16678, NA,16037, 16659,
16538, 16626), class = "Date"), date3 = structure(c(16685,16688, NA, 16659,
16568, 16672), class = "Date"), date4 = structure(c(16701, 16695, 16670,
16661, 16582, 16672), class = "Date"), date5 = structure(c(16709, 16695,
16661, 16667, 16619, 16692), class = "Date")), .Names = c("date1","date2",
"date3", "date4", "date5"), row.names = c("2", "3", "4", "5", "6", "7"),
class = "data.frame")
df
【问题讨论】:
-
apply将所有内容转换为character,导致diff失败。 -
对于 1,如果您的意思是向下列(使用
diff的常用方法),您只需要sapply(df, diff)。 -
如果你的意思是 1 的行,
t(apply(df, 1, function(x){diff(as.Date(x))})),虽然你会丢失你的列名。等效,但有点丑,并保留列名:t(sapply(1:nrow(df), function(x){diff(unlist(df[x,]))}))
标签: r date data-manipulation