【问题标题】:How to Classify data frame Based on a Columns in R? [duplicate]如何根据 R 中的列对数据框进行分类? [复制]
【发布时间】:2020-01-08 12:06:33
【问题描述】:

我有一个数据框并有这样的列:

gene    col1    col2    type
------------------------------
gene_1   a       b        1
gene_2   aa      bb       2
gene_3   a       b        1
gene_4   aa      bb       2

我想使用列“col2”和“col1”来查找列“type”。所以我需要一个基于“col2”和“col1”的分类。我应该如何在 R 中做到这一点?

非常感谢

【问题讨论】:

    标签: r classification


    【解决方案1】:

    基于。在输出中,一个选项是从列“col1”和“col2”创建组索引

    library(dplyr)
    df1 %>%
       mutate(type = group_indices(., col1, col2))
    #.   gene col1 col2 type
    #1 gene_1    a    b    1
    #2 gene_2   aa   bb    2
    #3 gene_3    a    b    1
    #4 gene_4   aa   bb    2
    

    如果有多个名称,那么一种选择是将字符串列名称转换为symbols,然后计算 (!!!)

    df1 %>%
        mutate(type = group_indices(., !!! rlang::syms(names(.)[2:3])))
    

    或在data.table

    library(data.table)
    setDT(df1)[, type := .GRP, .(col1, col2)]
    

    数据

    df1 <- structure(list(gene = c("gene_1", "gene_2", "gene_3", "gene_4"
    ), col1 = c("a", "aa", "a", "aa"), col2 = c("b", "bb", "b", "bb"
    ), type = c(1L, 2L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
    -4L))
    

    【讨论】:

    • 非常感谢,它适用于 2 列,如果我有 400 列怎么办?如何在不命名所有列的情况下编写代码?
    • @Mahshid。如果您的 400 列是从第 2 位到第 401 位,rlang::syms(names(.)[2:401]。做出改变。相应的索引
    猜你喜欢
    • 2020-12-26
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多