【发布时间】:2019-07-03 05:09:44
【问题描述】:
我有一个包含以下信息的数据集:
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 %>% mutate(sum = ifelse(UniqueNumber > 0, rowSums(.[, 2:(length(.)-1)]), NA), mean = ifelse(UniqueNumber > 0, rowMeans(.[, 2:(length(.)-1)]), NA))。 -
@tmfmnk 我认为您的代码不会遍历 UniqueNumber 的长度。看起来我的结果是对整个列求和,而不是停留在 UniqueValue 列的值。