【问题标题】:I would like to create a new variable with the Unique occurences and their Frequency in R [duplicate]我想创建一个新变量,其中包含唯一出现次数及其在 R 中的频率 [重复]
【发布时间】:2016-08-18 02:19:25
【问题描述】:

初学者,虽然我试图寻找这个问题的答案,但似乎没有人提供适用的解决方案。它可能是一个简单的,但我似乎不会破解它。我有这个数据框

df <- data.frame(FROM = c("A","A","A","B","D","C","A","D"), 
                 TO = c("B","C","D","A","C","A","B","C"))

我想创建一个带有额外变量的新数据框,称为“FREQ”,其中包含“FROM”和“TO”的所有唯一值,以便新数据集看起来像这样。我将不胜感激。

df2 <- data.frame(FROM = c("A","A","A","B","D","C"),
                  TO = c("B","C","D","A","C","A"),
                  FREQ = c(2,1,1,1,2,1))

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您使用dplyr 包,您可以使用count,这是group_by(FROM, TO) %&gt;% summarise(n = n()) 的快捷方式,并计算每个组的行数:

    library(dplyr)
    df %>% count(FROM, TO)
    
    #Source: local data frame [6 x 3]
    #Groups: FROM [?]
    
    #    FROM     TO     n
    #  <fctr> <fctr> <int>
    #1      A      B     2
    #2      A      C     1
    #3      A      D     1
    #4      B      A     1
    #5      C      A     1
    #6      D      C     2
    

    【讨论】:

      【解决方案2】:

      我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),按'FROM'、'TO'分组,我们得到每组的元素个数(.N

      library(data.table)
      setDT(df)[, .(FREQ = .N) ,.(FROM, TO)]
      #   FROM TO FREQ
      #1:    A  B    2
      #2:    A  C    1
      #3:    A  D    1
      #4:    B  A    1
      #5:    D  C    2
      #6:    C  A    1
      

      另一个选项是tally() 来自dplyr

      library(dplyr)
      df %>%
         group_by(FROM, TO) %>%
         tally()
      #    FROM     TO     n
      #   <fctr> <fctr> <int>
      #1      A      B     2
      #2      A      C     1
      #3      A      D     1
      #4      B      A     1
      #5      C      A     1
      #6      D      C     2
      

      或者使用base R中的table,我们只是得到数据集的频率,转换为data.frame并用subset去除'Freq'中的0个元素。

      subset(as.data.frame(table(df)), Freq !=0)
      

      【讨论】:

      • 感谢我已经到了当我忘记在将子集添加到我的代码后没有对数据集进行子集时得到结果的点。但是我有不止一种方法。这段代码对我有用。 ` df3
      • 感谢提供代码,我忘了在我的试用代码中对数据进行子集化。将子集添加到我的代码后,我得到了结果。但是,您为我的任务提供了不止一种方法。这段代码也对我有用。 ` df3
      猜你喜欢
      • 2015-08-16
      • 1970-01-01
      • 2022-11-11
      • 2022-01-14
      • 2017-01-07
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多