首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取针对R dataframe中的唯一id的值更改计数

获取针对R dataframe中的唯一id的值更改计数
EN

Stack Overflow用户
提问于 2018-06-24 02:41:54
回答 1查看 92关注 0票数 1

我像下面提到的dataframe (Dput):

代码语言:javascript
复制
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分组的值组中的更改次数,按日期从开始日期到日期。

代码语言:javascript
复制
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中进行的更改次数)。

代码语言:javascript
复制
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

按月分组的值的更改次数。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-06-24 05:42:10

这里是一个有趣的方法,使用OP的数据作为数据帧DF来计算所选变量的唯一变化数,如base R中的问题描述所定义的:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51004089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档