代码之家  ›  专栏  ›  技术社区  ›  Jordan

从数据框中提取唯一值,并使用r在列上生成

  •  0
  • Jordan  · 技术社区  · 7 年前

    如何从数据框中的每一列(数字和字符串)中提取唯一的值,并生成一列?

    a = c("a", "b", "c", "d", "a")
    b = c(1, 2, 3, 4, 3)
    df <- cbind(a, b)
    

    首选输出为:

     variable     Level
     a            a
     a            b
     a            c
     a            d
     b            1
     b            2
     b            3
     b            4
    

    上面的示例数据很简单,但目的是能够使用多个具有不同列名和数据的数据框的答案。非常感谢。

    3 回复  |  直到 7 年前
        1
  •  4
  •   twedl    7 年前

    快速+可扩展

    三年 gather 和dplyr的 distinct 为您提供快速获取该结构的方法。(我在函数中留下了包调用,这样您就可以记住哪个来自哪个包,而我总是忘记这些。)

    library(tidyverse)
    a = c("a", "b", "c", "d", "a")
    b = c(1, 2, 3, 4, 3)
    data.frame(a,b) %>% tidyr::gather() %>% dplyr::distinct()
    
      key value
    1   a     a
    2   a     b
    3   a     c
    4   a     d
    5   b     1
    6   b     2
    7   b     3
    8   b     4
    
        2
  •  2
  •   akrun    7 年前

    我们把它放在 list ,获取 unique 元素,将名称设置为 letters 然后 stack 到数据。框架

    d1 <- stack(setNames(lapply(list(a, b), unique), letters[1:2]))[2:1]
    colnames(d1) <- c('variable', 'Level')
    
        3
  •  1
  •   Terru_theTerror    7 年前

    df 数据框架创建:

    a = c("a", "b", "c", "d", "a")
    b = c(1, 2, 3, 4, 3)
    df <- cbind(a, b)
    

    列名称提取

    names<-colnames(df)
    

    数据提取

    variable<-NULL
    Level<-NULL
    for(i in 1:length(names))
    {
      variable<-c(variable,rep(names[i],length(unique(df[,i]))))
      Level<-c(Level,unique(df[,i]))
    }
    

    您的通用输出

    db<-cbind(variable,Level)
    db
         variable Level
    [1,] "a"      "a"  
    [2,] "a"      "b"  
    [3,] "a"      "c"  
    [4,] "a"      "d"  
    [5,] "b"      "1"  
    [6,] "b"      "2"  
    [7,] "b"      "3"  
    [8,] "b"      "4"