我有一个包含以下信息的数据集:

Subject    Value1    Value2    Value3      UniqueNumber
001        1         0         1           3
002        0         1         1           2
003        1         1         1           1

如果UniqueNumber的值> 0,我想对从第1行到UniqueNumber的每个主题的dplyr值求和,并计算平均值。因此,对于主题001,总和= 2,平均值= .67。
total = 0;
average = 0;
for(i in 1:length(Data$Subject)){
   for(j in 1:ncols(Data)){
   if(Data$UniqueNumber[i] > 0){
    total[i] = sum(Data[i,1:j])
    average[i] = mean(Data[i,1:j])
   }
}

编辑:我只是想通过“UniqueNumber”列中列出的列数求和。因此,这遍历每一行,并在“UniqueNumber”中列出的列处停止。
示例:具有主题002的第2行应将“Value1”和“Value2”列中的值相加,而具有主题003的第3行应仅将“Value1”列中的值相加。

最佳答案

检查此解决方案:

df %>%
  gather(key, val, Value1:Value3) %>%
  group_by(Subject) %>%
  mutate(
    Sum = sum(val[c(1:(UniqueNumber[1]))]),
    Mean = mean(val[c(1:(UniqueNumber[1]))]),
  ) %>%
  spread(key, val)

输出:
 Subject UniqueNumber   Sum  Mean Value1 Value2 Value3
  <chr>          <int> <dbl> <dbl>  <dbl>  <dbl>  <dbl>
1 001                3     2 0.667      1      0      1
2 002                2     1 0.5        0      1      1
3 003                1     1 1          1      1      1

10-06 13:56