我有一个名为Categories的因子向量,含有47个级别
Categories = as.factor(sort(make.unique(rep(letters, length.out = 47), sep='')))
[1] a a1 b b1 c c1 d d1 e e1 f f1 g g1 h h1 i i1 j j1 k k1 l l1 m m1 n n1 o o1 p p1 q q1 r r1 s s1 t
[40] t1 u u1 v w x y z
47 Levels: a a1 b b1 c c1 d d1 e e1 f f1 g g1 h h1 i i1 j j1 k k1 l l1 m m1 n n1 o o1 p p1 q q1 r r1 s s1 t t1 u u1 ... z
我有另一个名为cat的向量,其中有9个级别
cat = Categories[c(7,42,43,24,45,26,35,6,15)]
[1] d u1 v l1 x m1 r c1 h
47 Levels: a a1 b b1 c c1 d d1 e e1 f f1 g g1 h h1 i i1 j j1 k k1 l l1 m m1 n n1 o o1 p p1 q q1 r r1 s s1 t t1 u u1 ... z
我还有一个包含36行的数据帧My_Data。数据框中的一列具有多个来自cat
的值的出现My_Data = data.frame(name = make.unique(rep(c(1:10,LETTERS), length.out = 36), sep=''), cat = sample(rep(cat,4),36,replace = FALSE), position = 0)
name cat position
1 1 v 0
2 2 r 0
3 3 h 0
4 4 m1 0
5 5 h 0
6 6 u1 0
7 7 l1 0
8 8 h 0
9 9 u1 0
10 10 x 0
11 A x 0
12 B v 0
13 C d 0
14 D c1 0
15 E r 0
16 F v 0
17 G l1 0
18 H d 0
19 I l1 0
20 J c1 0
21 K u1 0
22 L x 0
23 M v 0
24 N d 0
25 O l1 0
26 P m1 0
27 Q r 0
28 R m1 0
29 S h 0
30 T m1 0
31 U c1 0
32 V d 0
33 W r 0
34 X x 0
35 Y c1 0
36 Z u1 0
我想用cat的特定值的出现次数填充数据框的位置列。所以,前15行希望:
name cat position
1 1 v 1
2 2 r 1
3 3 h 1
4 4 m1 1
5 5 h 2
6 6 u1 1
7 7 l1 1
8 8 h 3
9 9 u1 2
10 10 x 1
11 A x 2
12 B v 2
13 C d 1
14 D c1 1
15 E r 2
我该怎么做?
答案 0 :(得分:1)
您可以尝试group_by
中的mutate
和dplyr
。
library(dplyr)
Categories = as.factor(sort(make.unique(rep(letters, length.out = 47), sep='')))
cat = Categories[c(7,42,43,24,45,26,35,6,15)]
My_Data =
data.frame(name = make.unique(rep(c(1:10,LETTERS), length.out = 36), sep=''),
cat = sample(rep(cat,4),36,replace = FALSE),
position = 0) %>%
group_by(cat) %>%
mutate(position = 1:n())
答案 1 :(得分:0)
我们可以使用group_by
包中的row_number
和dplyr
。
My_Data2 <- My_Data %>%
group_by(cat) %>%
mutate(position = row_number())
答案 2 :(得分:0)
transform(My_Data, position = ave(as.character(cat), cat, FUN = seq_along))
此答案归功于docendo discimus