代码之家  ›  专栏  ›  技术社区  ›  Lucca Nielsen

根据其他列的值创建包含其他列名称的新列

  •  0
  • Lucca Nielsen  · 技术社区  · 4 年前

    我试图基于其他变量的值创建一个新的字符变量(在我的示例V4中)。我需要使用列名来填充这个新变量。

    我有这个:

      V1 V2 V3
    1  1  0  1
    2  0  1  1
    3  0  0  0
    4  1  1  1
    

    我希望新变量包含值等于1的所有列名

    这样地:

    V1 V2 V3       V4
    1  1  0  1    "V1,V3"
    2  0  1  1    "V2,V3"
    3  0  0  0     " " 
    4  1  1  1   "V1,V2,V3"
    

    示例数据:

    data.frame(
       V1 =c(1,0,0,1),
       V2 = c(0,1,0,1),
       V3 = c(1,1,0,1)
    )
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Quinten    4 年前

    您可以使用以下代码:

    library(dplyr)
    df %>%
      rowwise() %>%
      mutate(V4 = paste0(names(.)[c_across() == 1], collapse = ','))
    

    输出:

    # A tibble: 4 × 4
    # Rowwise: 
         V1    V2    V3 V4        
      <dbl> <dbl> <dbl> <chr>     
    1     1     0     1 "V1,V3"   
    2     0     1     1 "V2,V3"   
    3     0     0     0 ""        
    4     1     1     1 "V1,V2,V3"
    
        2
  •  1
  •   akrun    4 年前

    使用 base R 具有 apply

    df1$V4 <- apply(df1, 1, \(x) toString(names(x)[x ==1]))