R 将因子列替换为其计数

R 将因子列替换为其计数,r,R,我一直在试图找到一种方法,用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

我一直在试图找到一种方法,用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
因为级别
红色
的计数为4、
蓝色
1和
绿色
2

到目前为止,我所有的尝试似乎都过于复杂(apply、merge、table等等),它们并没有产生我所需要的结果


有没有关于如何解决这个问题的建议?

您可以将向量制成表格,然后使用级别的整数值将其展开

t$color <- with(t, tabulate(color)[color])
t
#   color
# 1     4
# 2     1
# 3     4
# 4     2
# 5     4
# 6     4
# 7     2

x使用
数据表

setDT(t)
t[, color2 := .N, by = color][, .(color = color2)]

   color
1:     4
2:     1
3:     4
4:     2
5:     4
6:     4
7:     2

我删除了不必要的
as.factor
行,因为它是由
data.frame
@RichScriven隐式完成的,谢谢您的编辑和格式化。
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
setDT(t)
t[, color2 := .N, by = color][, .(color = color2)]

   color
1:     4
2:     1
3:     4
4:     2
5:     4
6:     4
7:     2