ben*_*ays 1 r dataframe dplyr data.table
library(data.table)
df <- structure(
list(
type = c("AAA", "AAA", "AAA", "BCD", "BCD", "BCD", "EEE", "EEE", "EEE", "EEE"),
date = c("2015-01-01", "2015-01-01", "2015-01-01", "2015-01-02", "2015-01-05", "2015-01-05", "2015-01-04", "2015-01-04", "2015-01-04", "2015-01-04")
),
.Names = c("type", "date"),
class = "data.frame",
row.names = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L))
df$date <- as.Date(df$date)
df
Run Code Online (Sandbox Code Playgroud)
设置以下唯一名为'df'的示例数据框
type date
0 AAA 2015-01-01
1 AAA 2015-01-01
2 AAA 2015-01-01
3 BCD 2015-01-02
4 BCD 2015-01-05
5 BCD 2015-01-05
6 EEE 2015-01-04
7 EEE 2015-01-04
8 EEE 2015-01-04
9 EEE 2015-01-04
Run Code Online (Sandbox Code Playgroud)
我正在寻求有关基础R,data.table或甚至dplyr爱好者如何创建新列的帮助,该列列出了为给定'日期'记录'类型'的次数.
type date typeDateGroup
0 AAA 2015-01-01 3
1 AAA 2015-01-01 3
2 AAA 2015-01-01 3
3 BCD 2015-01-02 1
4 BCD 2015-01-05 2
5 BCD 2015-01-05 2
6 EEE 2015-01-04 4
7 EEE 2015-01-04 4
8 EEE 2015-01-04 4
9 EEE 2015-01-04 4
Run Code Online (Sandbox Code Playgroud)
如果它有助于了解,与此示例相反,通常我的数据包括3-5毫米行.
不要跑这个,这是我的尝试,它失败了......
library(data.table)
df <- as.data.table(df)
df<-df[order(type, date), `:=`(typeDateGroup = .N), by=type, date]
Run Code Online (Sandbox Code Playgroud)
感谢您关注此事并主宰您的技能.
对于未来的知识,在您的data.table版本中,如果您想要覆盖df只是通过引用进行分配,即setDT(df)代替df <- as.data.table(df).
此外,在对象中使用reference(:=)赋值时data.table,不需要df<-.
此外,您还可以对data.table使用data.table的setorder函数进行排序(尽管不必,但不是在这种特定情况下,通常也不是).
最后,经过两个变量进入时by的说法,你应该使用list(type, date)或.(type, date)或c("type", "date")或"type,date"
所以为了完整性,这是dplyr版本
library(dplyr)
df %>%
group_by(type, date) %>%
mutate(typeDateGroup = n())
Run Code Online (Sandbox Code Playgroud)