R新列汇总列组的计数
R new column summarizing count of groups of columns
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
设置以下示例数据框,唯一命名为 '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
我正在寻求有关 R 基础的帮助,data.table,
甚至 dplyr 爱好者创造 a
列出数量的新列
为给定的 'date'.
记录了 'type' 的次数
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
如果有助于了解,与此示例相反,通常我的数据包含 3-5 毫米的行。
不要运行这个,这是我的尝试,但失败了...
library(data.table)
df <- as.data.table(df)
df<-df[order(type, date), `:=`(typeDateGroup = .N), by=type, date]
感谢您查看此内容并用您的技能控制。
几个选项:
## Using base R only:
df <- transform(df, typeDateGroup=ave(as.numeric(date), type, date, FUN=length))
## With data.table:
library(data.table)
dt <- data.table(df)
dt[, typeDateGroup:=.N, by=c("type","date")]
为了将来了解,在您的 data.table
版本中,如果您想覆盖 df
,只需通过引用进行赋值,即 setDT(df)
而不是 df <- as.data.table(df)
。
此外,在 data.table
对象中使用引用赋值 (:=
) 时,在 df<-
中则不需要。
此外,您还可以使用 data.table
的 setorder
函数对 data.table
进行排序(尽管不是必须的,在这种特定情况下不是,一般情况下也不是)。
最后,当将两个变量传递给 by
参数时,您应该使用 list(type, date)
或 .(type, date)
或 c("type", "date")
或 "type,date"
为了完整起见,这里是 dplyr
版本
library(dplyr)
df %>%
group_by(type, date) %>%
mutate(typeDateGroup = n())
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
设置以下示例数据框,唯一命名为 '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
我正在寻求有关 R 基础的帮助,data.table, 甚至 dplyr 爱好者创造 a 列出数量的新列 为给定的 'date'.
记录了 'type' 的次数 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
如果有助于了解,与此示例相反,通常我的数据包含 3-5 毫米的行。
不要运行这个,这是我的尝试,但失败了...
library(data.table)
df <- as.data.table(df)
df<-df[order(type, date), `:=`(typeDateGroup = .N), by=type, date]
感谢您查看此内容并用您的技能控制。
几个选项:
## Using base R only:
df <- transform(df, typeDateGroup=ave(as.numeric(date), type, date, FUN=length))
## With data.table:
library(data.table)
dt <- data.table(df)
dt[, typeDateGroup:=.N, by=c("type","date")]
为了将来了解,在您的 data.table
版本中,如果您想覆盖 df
,只需通过引用进行赋值,即 setDT(df)
而不是 df <- as.data.table(df)
。
此外,在 data.table
对象中使用引用赋值 (:=
) 时,在 df<-
中则不需要。
此外,您还可以使用 data.table
的 setorder
函数对 data.table
进行排序(尽管不是必须的,在这种特定情况下不是,一般情况下也不是)。
最后,当将两个变量传递给 by
参数时,您应该使用 list(type, date)
或 .(type, date)
或 c("type", "date")
或 "type,date"
为了完整起见,这里是 dplyr
版本
library(dplyr)
df %>%
group_by(type, date) %>%
mutate(typeDateGroup = n())