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