我像下面提到的dataframe (Dput):
structure(list(ID = c("TTR-1", "TTR-1", "TTR-2", "TTR-2", "TTR-2",
"TTR-3", "TTR-4", "TTR-4", "TTR-4", "TTR-5"), Value1 = c(100L,
400L, 147L, 159L, 165L, 178L, 166L, 150L, 150L, 169L), Value2 = c(15,
5.05, 13, 13, 13, 7.25, 11, 13, 15, 19), Value3 = c(25L, 25L,
18L, 32L, 32L, 14L, 45L, 57L, 60L, 22L), Date = c("26/08/2017 06:08:12",
"26/08/2017 15:45:18", "01/09/2017 12:04:16", "04/09/2017 15:02:47",
"04/09/2017 18:22:15", "12/09/2017 19:07:17", "15/09/2017 21:19:19",
"15/09/2017 22:12:47", "15/09/2017 23:15:18", "20/10/2017 09:37:14"
)), class = "data.frame", row.names = c(NA, -10L))
我想把它分成三个不同的类别。
按ID
分组的值组中的更改次数,按日期从开始日期到日期。
ID Value1 Value2 Value3
TTR-1 1 1 0
TTR-2 2 0 1
TTR-3 0 0 0
TTR-4 1 2 2
TTR-5 0 0 0
按Date
分组的值中的更改次数(该日期在唯一ID
中进行的更改次数)。
Date T U C Value1 Value2 Value3
26/08/2017 2 1 1 1 0 1
01/09/2017 1 1 0 0 0 0
04/09/2017 2 0 1 2 0 1
12/09/2017 1 1 0 0 0 0
15/09/2017 3 1 1 1 2 1
20/10/2017 1 1 0 0 0 0
按月分组的值的更改次数。
Month T U C Value1 Value2 Value3
Aug-17 1 1 1 1 0 1
Sep-17 7 3 4 3 2 2
Oct-17 1 1 0 0 0 0
发布于 2018-06-24 05:42:10
这里是一个有趣的方法,使用OP的数据作为数据帧DF来计算所选变量的唯一变化数,如base R中的问题描述所定义的:
DF <- within(DF, {Date <- as.Date(strptime(Date, "%d/%m/%Y %H:%M:%S"))
Month <- format(Date, '%m-%Y')})
cols <- c("Value1", "Value2", "Value3")
namesVector <- c("Date", "ID", "Month")
formulaChar <- paste0('column ~ ', namesVector)
for (i in seq_along(namesVector)){
temp <- Reduce(function(x, y) merge(x, y, by = namesVector[i], all = T),
lapply(DF[, cols],
function(column) aggregate(formula = as.formula(formulaChar[i]),
data = DF,
FUN = function(g) length(unique(g))-1)))
names(temp) <- c(namesVector[i], cols)
print(temp)
assign(paste0("DFby", namesVector[i]), temp)
}
rm(cols, namesVector, formulaChar, i, temp)
https://stackoverflow.com/questions/51004089
复制相似问题