我有一个包含以下信息的数据集:
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