将因子列替换为其计数

时间:2017-07-10 17:21:58

标签: 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

因为级别red的计数为4,blue 1和green 2。

到目前为止,我所有的尝试似乎都过于复杂(应用,合并,表格......)而且它们并没有产生我需要的东西。

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

3 个答案:

答案 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