在R

时间:2018-09-19 16:03:19

标签: r

我有一张桌子,上面有一个人的名单,每个人都有不同的ID。 ID被复制12 * n次,每行包含一个值。例如:

table

我想每12个月计算一次这些值的总和,即来自行2:13、14:25等的值总和,以及我的数据表中每个人的总和。

我已经做到了,但是似乎没有用。

for (i in unique(new_table[,"ID"])){

  n<-data[n_pers,9]*12   # n differs for each person and is obtained from another table

  for (t in 0:n) {

  new_table$yearly<-sum(new_table[which(new_table$ID==i),][t*12+1:min(n,(t+1)*12+1) ,"Values"])

}}

没有错误产生。但是,我的年度列中仅包含NA。为什么呢?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是您需要的:

android:checked="@={viewmodel.isSwitchChecked()}"

进行测试:

ID<-c(rep("a",36),rep("b",60));Val<-round(rnorm(96,15,4),digits=0)
df<-as.data.frame(cbind(ID,Val))
df$Val<-as.numeric(df$Val)
Yearly<-NULL
df$Yearly<-0
library("zoo")
for(i in unique(df$ID)){
  Yearly<-rep(rollapply(df[which(df$ID==i),]$Val, 12, sum, by = 12), 
        rep(12,nrow(df[which(df$ID==i),])%/%12))
  df[which(df$ID==i),]$Yearly<-Yearly
}

经过编辑,可以回答您评论中提出的问题(我不太清楚您需要什么,因此给您几个选择的机会!):

sum(df[12,]$Val)
#[1] 102

head(df,12)
#   ID Val Yearly
#1   a   6    102
#2   a   9    102
#3   a  12    102
#4   a   5    102
#5   a  19    102
#6   a  12    102
#7   a  10    102
#8   a   4    102
#9   a   7    102
#10  a   4    102
#11  a   8    102
#12  a   6    102

答案 1 :(得分:0)

您还可以使用dplyr获得所需的内容。这里的技巧是在这里创建新的分组变量year_index。或将其调整为所需的任何时间间隔。

df <- data.frame(ID = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b"), Val = c(13, 12, 11, 14, 15, 6, 13, 12, 1, 9, 10, 5, 1,2,3,4,5,6,7,8,9,10,11,12,1,2))

library(dplyr)

df <- df %>% 
  group_by(ID) %>%
  mutate(year_index = ((1:n() -1) %/% 12) + 1) %>%
  group_by(year_index) %>% 
  mutate(sum = sum(Val))

# A tibble: 26 x 4
# Groups:   month_index [2]
   ID      Val month_index   sum
   <fct> <dbl>       <dbl> <dbl>
 1 a        13           1   124
 2 a        12           1   124
 3 a        11           1   124
 4 a        14           1   124
 5 a        15           1   124
 6 a         6           1   124
 7 a        13           1   124
 8 a        12           1   124
 9 a         1           1   124
10 a         9           1   124
11 a        10           1   124
12 a         5           1   124
13 a         1           2    78
14 a         2           2    78
15 a         3           2    78
16 a         4           2    78
17 a         5           2    78
18 a         6           2    78
19 a         7           2    78
20 a         8           2    78
21 a         9           2    78
22 a        10           2    78
23 a        11           2    78
24 a        12           2    78
25 b         1           1   124
26 b         2           1   124