说我有以下df:
myshopdotcom.example
现在我想在V1 = 1时分别对V2和V3的值求和,对应其他变量。 我想获得以下df-
VirtualHost
答案 0 :(得分:2)
使用do.call
和mapply
的选项如下:
do.call(rbind, mapply(function(x){
v <- colSums(df[!is.na(df[,x]) & df[,x]==1,-1], na.rm = TRUE)
v[x-1] <- 0
v
}, 2:4, SIMPLIFY = FALSE))
# V1 V2 V3
# [1,] 0 2 2
# [2,] 2 0 1
# [3,] 2 1 0
注意: (1,3)
和(3,1)
的预期输出与提及的值不匹配。也许OP需要非常接受这两个值。
答案 1 :(得分:1)
以下是tidyverse
library(tidyverse)
nm1 <- names(df)[-1]
set_names(nm1, nm1) %>%
map_df(~ df %>%
filter(!!rlang::sym(.x)==1) %>%
select(-ID) %>%
summarise_all(sum, na.rm = TRUE) %>%
mutate(!! .x := 0), .id = 'Var')
# A tibble: 3 x 4
# Var V1 V2 V3
# <chr> <dbl> <dbl> <dbl>
#1 V1 0 2.00 2.00
#2 V2 2.00 0 1.00
#3 V3 2.00 1.00 0