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