我希望创建一个列,为每个唯一值指示它在数据集中出现的次数。我想在下面的数据帧中生成频率列:
ID Frequency
111 4
205 2
603 6
111 4
在原始数据中,111
出现4次,205
出现2次,603
出现6次,等等。
基于@rogues77评论,在最初给出方法后,解决方案可以是:
library(dplyr)
#Code 1
newdf <- df %>% group_by(ID) %>% mutate(N=n())
#Code 2
newdf <- df %>% group_by(ID) %>% summarise(N=n())
当输入数据DF
在末尾的注释中可重复显示时,将ave
与length
一起使用。未使用任何程序包。
nr <- nrow(DF)
transform(DF, Freq = ave(1:nr, ID, FUN = length))
给予:
ID Freq
1 111 2
2 205 1
3 603 1
4 111 2
或使用dplyr
library(dplyr)
DF %>%
group_by(ID) %>%
mutate(Freq = n()) %>%
ungroup
备注
Lines <- "ID
111
205
603
111 "
DF <- read.table(text = Lines, header = TRUE)
我们也可以使用data.table
方法
library(data.table)
setDT(DF)[, Freq := .N, ID]
数据
DF <- structure(list(ID = c(111L, 205L, 603L, 111L)), class = "data.frame",
row.names = c(NA,
-4L))