【问题标题】:Counting dates (as a class) in R [duplicate]在R中计算日期(作为一个类)[重复]
【发布时间】:2017-01-06 16:34:50
【问题描述】:

假设我在R中有一个简单的数据框,如下:

#example data frame
a = c("red","red","green")
b = c("01/01/1900","01/02/1950","01/05/1990")
df = data.frame(a,b)
colnames(df)<-c("Color","Dates")

我的目标是计算“颜色”列中每个变量的日期数(作为一个类 - 而不是单独)。所以,结果应该是这样的:

#output should look like this:
a = c("red","green")
b = c("2","1")
df = data.frame(a,b)
colnames(df)<-c("Color","Dates")

红色与两个日期相关联——日期本身并不重要,我只想计算数据框中每种颜色的日期总数。

【问题讨论】:

    标签: r


    【解决方案1】:

    或者在基础 R 中:

    sapply(split(df, df$Color), nrow)
    # green   red 
    #     1     2 
    

    【讨论】:

    • 我最喜欢这个。
    • 这很棒。谢谢你。然而,一个复杂的问题 - 假设有一个红色的 NA,如下所示:a=c("red","red","red","green") b=c("01/01/1900","01/02/1950","NA","01/05/1990") df=data.frame(a,b) colnames(df)&lt;-c("Color","Dates") ...我们可以不计算 NA 吗?
    • 您可以从省略 NA 值开始:df &lt;- omit.na(df),然后像以前一样继续。我突然想到,如果你真的只是在计算每种颜色在表格中出现的次数(在删除 NA 值之后),你可以简单地使用 table(df$Color) 来获得你想要的东西。
    【解决方案2】:

    我们可以使用data.table

    library(data.table)
    setDT(df)[, .(Dates = uniqueN(Dates)) , Color]
    #   Color Dates
    #1:   red     2
    #2: green     1
    

    【讨论】:

    • 这可行,但如果日期不是唯一的怎么办?那么,以红色为例,两个日期都是“01/01/1900”?
    • @knaslund 使用这个答案将是 1。你对这个案子有什么期望?你需要setDT(df)[, .(Dates = .N), Color]
    • 啊,是的,这看起来会很棒!谢谢!
    【解决方案3】:

    使用来自 tidyverse 的 dplyr 包:

    library(dplyr)
    df %>% group_by(Color) %>% summarise(n())
    # # A tibble: 2 × 2
    #    Color `n()`
    #   <fctr> <int>
    # 1  green     1
    # 2    red     2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-03
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多