Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个列,其中包含一个值迄今为止在R中出现的次数?_R - Fatal编程技术网

创建一个列,其中包含一个值迄今为止在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))