【问题标题】:R extracting the frequenciesR提取频率
【发布时间】:2019-07-09 20:23:00
【问题描述】:

我正在尝试获取频率,但我的 ID 重复。这是一个示例数据:

id <- c(1,1,2,2,3,3)
gender <- c("m","m","f","f","m","m")
score <- c(10,5,10,5,10,5)
data <- data.frame("id"=id,"gender"=gender, "score"=score)

> data
  id gender score
1  1      m    10
2  1      m     5
3  2      f    10
4  2      f     5
5  3      m    10
6  3      m     5

我想获取性别类别的频率,但我有重复的 ID。当我在下面运行此代码时:

gender<-as.data.frame(table(data$gender))
> gender
  Var1 Freq
1    f    2
2    m    4

频率应该是女性=1,男性=2。它应该如下所示:

> gender
  Var1 Freq
1    f    1
2    m    2

考虑到 id 信息,我怎样才能得到这个?

【问题讨论】:

  • 您首先需要唯一标识 id-gender 组合。然后做你的桌子。这是一种方法:table(unique(data[ , c("id", "gender"))$gender)

标签: r data.table frequency


【解决方案1】:

您可以使用data.table::uniqueN 计算每个性别组的唯一 ID 数

library(data.table)
setDT(data)

data[, .(Freq = uniqueN(id)), gender]

#    gender Freq
# 1:      m    2
# 2:      f    1

【讨论】:

    【解决方案2】:

    @IceCreamToucan 和dplyr 的想法:

    data %>%
     group_by(gender) %>%
     summarise(freq = n_distinct(id))
    
      gender  freq
      <fct>  <int>
    1 f          1
    2 m          2
    

    【讨论】:

    • 由于某种原因,我得到的是总频率,而不是您的代码中每个类别的频率。
    • 这很奇怪。尝试更新到最新版本的dplyr
    【解决方案3】:

    在基础 R 中

    rowSums(table(data$gender,data$id)!=0)
    f m 
    1 2 
    

    【讨论】:

      【解决方案4】:

      参加聚会迟到了,我对使用分组或rowSums() 的复杂答案感到非常惊讶。

      在基础 R 中,我会

      1. 通过使用duplicated(id) 进行子集化,从data.frame 中删除重复的id 行,
      2. gender 列上应用table()

      所以,代码是

      table(data[duplicated(data$id), "gender"])
      
      f m 
      1 2
      

      【讨论】:

        猜你喜欢
        • 2015-03-20
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 2016-12-09
        • 1970-01-01
        相关资源
        最近更新 更多