我正在尝试做一种有条件的rowSums
。
我有一个数据框,其中有四列包含1和0的列,以及另一个变量,该变量指示应添加哪些列以使行总计。
例如:
df <- matrix(rbinom(40, 1, 0.5), ncol = 4)
df <- as.data.frame.matrix(df)
df$group <- sample(c('12', '123', '1234'), 10, replace = T)
如果组为12
,则应添加列V1:V2,如果添加123
,则应添加V1:V3,如果添加1234
,则应添加列V1:V4。
我尝试了一种劳动密集型的方法:
df$total12 <- rowSums(df[,c('V1', 'V2')])
df$total123 <- rowSums(df[,c('V1', 'V2', 'V3')])
df$total1234 <- rowSums(df[,c('V1', 'V2', 'V3', 'V4')])
df$total <- ifelse(df$group == '12', df$total12,
ifelse(df$group == '123', df$total123, df$total1234))
有更简单的方法吗?
答案 0 :(得分:1)
这里是一个选项。我们通过拆分“组”来创建行/列索引,根据索引提取“ df”的值,然后获取按FROM ubuntu:16.04
:
:
if exists <repo-name>
COPY <repo-name>
else
RUN git clone <url>
:
索引分组的sum
row
答案 1 :(得分:1)
这是使用switch
函数的另一个选项。与一系列嵌套的ifelse
语句相比,此方法更易读且易于扩展。
df$total<-sapply(1:length(df$group), function(i){switch(df$group[i],
"12"=rowSums(df[i, c('V1', 'V2')]),
"123"=rowSums(df[i, c('V1', 'V2', 'V3')]),
"1234"=rowSums(df[i, c('V1', 'V2', 'V3', 'V4')]))})
基本上,循环遍历df $ group的元素并选择要使用的适当公式。如果数据集不太长,性能应该可以接受。