-2

我是这R门语言的新手,我很难计算每个Identification.

我有一个非常大的每月观察数据集,按如下方式分组:

Code      Subset   Identification   Names        Times       Value      %   
100       1001        10011         .....        201012       10        40 
100       1001        10012         .....        201012       11        60 
100       1002        10021         .....        201012        7        30 
100       1002        10022         .....        201012       13        70 
..... 
100       1001        10011        .....         201301       11        45 
100       1001        10012        .....         201301       15        55 
100       1002        10021        .....         201301        9        33 
100       1002        10022        .....         201301       17        67 

我需要编写一个函数来计算每个Identification. 然后,我需要汇总在“子集”的上层计算的值(平均加权“%”)。

我以这种方式将向量的格式更改为timesyear-month%Y-%m”: as.yearmon(as.character(Data$Times), format = "%Y%m")

我试图计算每次Identification使用splitand的回报sapply,如下所示: xm <- split(Data, Identification) Retxm <- sapply(1:length(xm), function(x) returns(Value))

我使用上面的函数得到的输出是这样的:

        [,1]          [,2]          [,3]          [,4]          
[1,]            NA            NA            NA            NA        
[2,]  1.605198e-03  1.605198e-03  1.605198e-03  1.605198e-03 
[3,] -1.190902e-02 -1.190902e-02 -1.190902e-02 -1.190902e-02 
[4,]  3.318032e-03  3.318032e-03  3.318032e-03  3.318032e-03 

输出不是很清楚,所以我会在 Times 的行和标题上的Identification.

太感谢了!

4

1 回答 1

0

这是一个类似的最小数据集:

set.seed(1)
df1 <- data.frame(id=sample(c("10011", "10012", "10013"), 6, replace=TRUE),
                  d1=rep(c(201012, 201101), each=3),
                  v1=ceiling(20*runif(6))
                  )

至于您的第一个问题,除非您指定除了月份和年份之外的日期,否则您不能将对象格式化为Date基础。R要处理按月和年指定的日期,您可以使用:

library(zoo)
df1$d1 <- as.yearmon(as.character(df1$d1), format="%Y%m")

至于问题的第二部分,我不清楚您要执行哪种计算。按照您的方法,您确实可以splitdata.frame每个元素执行某些操作,例如获取v1列中元素的总和:

l1 <- split(df1, df1$id)
sapply(1:length(l1), function(i) sum(l1[[i]]$v1))

编辑我的 Java 不起作用,因此无法添加评论。仍然不清楚您要做什么。如果你能用一个工作例子把它拼出来会更好;如果可以,请尝试编辑您的原始问题。

于 2013-10-15T02:22:42.293 回答