将数据帧转换为方形数据帧

时间:2018-04-20 21:54:08

标签: r

说我有以下df:

myshopdotcom.example

现在我想在V1 = 1时分别对V2和V3的值求和,对应其他变量。 我想获得以下df-

VirtualHost

2 个答案:

答案 0 :(得分:2)

使用do.callmapply的选项如下:

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