创建一个列,其中包含一个值迄今为止在R中出现的次数?
我有一个数据表:创建一个列,其中包含一个值迄今为止在R中出现的次数?,r,R,我有一个数据表: ID FREQUENCY "jso" 3 "and" 2 "jso" 3 "mo" 1 "jso" 3 "and" 2 它有一个带有频率的列。但是,我想创建一个表,其中包含到目前为止id出现的次数。所以我希望我的数据表如下所示: ID FREQUENCY "jso" 1 "and" 1 "jso" 2 "mo"
ID FREQUENCY
"jso" 3
"and" 2
"jso" 3
"mo" 1
"jso" 3
"and" 2
它有一个带有频率的列。但是,我想创建一个表,其中包含到目前为止id出现的次数。所以我希望我的数据表如下所示:
ID FREQUENCY
"jso" 1
"and" 1
"jso" 2
"mo" 1
"jso" 3
"and" 2
您将如何做到这一点?这可以通过分组操作来完成。使用
data.table
,将“data.frame”转换为“data.table”(setDT(df1)
),按“ID”分组,我们得到行序列(seq_len(.N)
)并将其分配给(:=
)频率
library(data.table)
setDT(df1)[,FREQUENCY := seq_len(.N) , by = ID]
或者使用
dplyr
,row\u number()
是一个方便的行序列函数(按“ID”分组后)
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(FREQUENCY = row_number())
或使用
base R
with(df1, ave(FREQUENCY, ID, FUN = seq_along))
#[1] 1 1 2 1 3 2
数据
df1
df1 <- structure(list(ID = c("jso", "and", "jso", "mo", "jso", "and"
), FREQUENCY = c(3L, 2L, 3L, 1L, 3L, 2L)), .Names = c("ID", "FREQUENCY"
), class = "data.frame", row.names = c(NA, -6L))