如何在R中计算因子频率并在新的数据帧中组织

如何在R中计算因子频率并在新的数据帧中组织,r,dataframe,dplyr,r-factor,summarize,R,Dataframe,Dplyr,R Factor,Summarize,我有这样一个数据帧: test1 = data.frame("id" = c("FC01", "FC01", "FC22", "FC03", "FC01"), "product" = c("p01", "p02", "p03", "p01", "p03"), "year" = c("2018", "2017", "2015", "2018", "2016")) test2 = data.frame("times"

我有这样一个数据帧:

test1 = data.frame("id" = c("FC01", "FC01", "FC22", "FC03", "FC01"),
                    "product" = c("p01", "p02", "p03", "p01", "p03"),
                    "year" = c("2018", "2017", "2015", "2018", "2016"))
test2 = data.frame("times" = c(3, 1), "id" = c("FC01", "FC03"),
                   "year" = c("2018, 2017, 2016", "2018"))
我需要找到2016年至2018年间购买的超过onc的ID,并知道他们购买了哪些产品以及购买的年份。 是否可以创建一个新的数据框来显示ID以及它们出现的次数,以及这是什么时候发生的?大概是这样的:

test1 = data.frame("id" = c("FC01", "FC01", "FC22", "FC03", "FC01"),
                    "product" = c("p01", "p02", "p03", "p01", "p03"),
                    "year" = c("2018", "2017", "2015", "2018", "2016"))
test2 = data.frame("times" = c(3, 1), "id" = c("FC01", "FC03"),
                   "year" = c("2018, 2017, 2016", "2018"))
我使用了
dplyr
,并尝试按id分组并过滤出现多次的每个id,但我不知道如何继续获得类似于test2的内容。非常感谢您提供这方面的任何提示。

test1$year%过滤器(介于(20162018年之间))
test1$year <- as.numeric(as.character(test1$year))

test1 %>% filter(between(year,2016,2018))
      %>% group_by(id)
      %>% summarize(times = n(),
          year = toString(unique(year)))


  id    times year          
  <fct> <int> <chr>         
1 FC01      3 2018 2017 2016
2 FC03      1 2018  
%>%分组人(id) %>%汇总(次=n(), 年份=toString(唯一(年份))) 身份证年份 1 FC01 3 2018 2017 2016 2 FC03 1 2018
注:

  • 获取
    times
    列很容易,我们只需使用实用函数
    dplyr::n()
  • 对于粘贴的年(唯一)字符串名称列表,方法与
    toString(…)
    paste0(as.character(…),collapse='')更干净。
  • 注意:我们必须使用
    unique(year)
    ,因为同一年可能有多个条目
  • 为了能够
    过滤(在(2016年、2018年)之间)
    ,我们必须首先将
    年份
    设置为数字,而不是因子(或者至少,确保因子水平也为2015..2018,以便直接将
    设置为.numeric()
    按预期工作,而不是给出1..4

%%>%filter(year,2016,2018))
只有当
year
是一个数字,而不是一个带有字符串标签的因子时,才最有效。因此,首先转换
test1$year始终将
year
等数字列保留为数字(除非您有充分理由将它们设置为因子,例如打印标签的自定义顺序)。如果它们成为factor的唯一原因是因为您
read.csv()
没有
选项('stringsAsFactors'=FALSE)
,那么请阅读这是一个黄金提示,@smci!非常感谢!很高兴能提供帮助。欢迎使用so!查看dplyr、data.table和tidyr教程,这些软件包的功能非常强大。