很抱歉,如果我问的是明显的东西,但找不到类似的东西。
假设我有这些数据:
a<-c('blue','blue','green','red','black',
'white','blue','blue','blue','red',
'black','white','blue','green','red',
'black','white','white','black','white',
'blue','white','blue','green')
并希望将其放在数据框中,其中的列总结了每个元素在整个向量中出现的次数,无论它是多余的。像这样:
data.frame(a=c('blue','blue','green','red',
'black','white','blue','blue',
'blue','red','black','white',
'blue','green','red','black',
'white','white','black','white',
'blue','white','blue','green'),
b=c(8,8,3,3,4,6,8,8,8,3,4,
6,8,3,3,4,6,6,4,6,8,6,8,3))
任何帮助都将不胜感激。
答案 0 :(得分:2)
根据mnel链接的问题的精神,以下是如何使用ave:
data.frame(a, b=ave(seq_along(a), a, FUN=length))
a b
1 blue 8
2 blue 8
3 green 3
4 red 3
5 black 4
6 white 6
7 blue 8
8 blue 8
9 blue 8
10 red 3
11 black 4
12 white 6
13 blue 8
14 green 3
15 red 3
16 black 4
17 white 6
18 white 6
19 black 4
20 white 6
21 blue 8
22 white 6
23 blue 8
24 green 3
这使用了一个虚假的数字向量,只取每个值的长度。
采用1
的向量并取总和可能更有意义:
data.frame(a, b=ave(rep(1, length(a)), a, FUN=sum))
结果是一样的。
答案 1 :(得分:1)
计算频率
counts<-table(a)
将其变为data.frame
df<-as.data.frame(counts)
对于df中的每一行,重复频率
df2 <- sapply(1:nrow(df),
function(x) df[rep(x, df$Freq[x]), ],simplify = FALSE)
将数据帧列表转换为一个数据帧
df3<-do.call("rbind", df2)
df3
a Freq
black 4
black 4
black 4
black 4
blue 8
blue 8
blue 8
blue 8
blue 8
blue 8
blue 8
blue 8
green 3
green 3
green 3
red 3
red 3
red 3
white 6
white 6
white 6
white 6
white 6
white 6