我一直试图找到一种方法来替换R因子的计数/频率。例如,以下数据框会产生类似这样的内容
t <- data.frame(color = c('red', 'blue', 'red', 'green', 'red', 'red', 'green'))
color
1 red
2 blue
3 red
4 green
5 red
6 red
7 green
我有兴趣用它的出现次数替换因子,所以它看起来像这样
color
1 4
2 1
3 4
4 2
5 4
6 4
7 2
因为级别red
的计数为4,blue
1和green
2。
到目前为止,我所有的尝试似乎都过于复杂(应用,合并,表格......)而且它们并没有产生我需要的东西。
关于如何解决这个问题的任何建议?
答案 0 :(得分:2)
您可以将矢量制表,然后使用级别的整数值展开它。
t$color <- with(t, tabulate(color)[color])
t
# color
# 1 4
# 2 1
# 3 4
# 4 2
# 5 4
# 6 4
# 7 2
另一种选择是将ave()
与length()
一起使用。
with(t, ave(seq_along(color), color, FUN = length))
# [1] 4 1 4 2 4 4 2
答案 1 :(得分:0)
x <- read.table(text=" color
1 red
2 blue
3 red
4 green
5 red
6 red
7 green", header=TRUE)
data.frame(x, count=sapply(1:nrow(x), function(i) sum(x$color==x$color[i])))
# color count
# 1 red 4
# 2 blue 1
# 3 red 4
# 4 green 2
# 5 red 4
# 6 red 4
# 7 green 2
答案 2 :(得分:0)
使用data.table
setDT(t)
t[, color2 := .N, by = color][, .(color = color2)]
color
1: 4
2: 1
3: 4
4: 2
5: 4
6: 4
7: 2