应用于rep()的向量上的join或outer()

应用于rep()的向量上的join或outer(),r,R,我原以为这会很容易,但结果却很难。这是一个简单的问题:我有一个名称向量: [1] David David David Nathan Holly Holly Holly Holly [9] Holly Sue Sue Sue Sue Sue Rene Michelle [17] Michelle Michelle Jennie Jennie Jennie Jennie 我

我原以为这会很容易,但结果却很难。这是一个简单的问题:我有一个名称向量:

[1] David    David    David    Nathan   Holly    Holly    Holly    Holly   
[9] Holly    Sue      Sue      Sue      Sue      Sue      Rene     Michelle
[17] Michelle Michelle Jennie   Jennie   Jennie   Jennie  
我想创建一个索引向量,这样每个名称都可以得到相同的索引:

[1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
我用计算机得到了每个名字的号码

bar <- ddply(df, .(Rater.Name), summarize, rater.n=sum(!is.na(Rater.Name)))

还有各种各样的东西,比如outer(),by(),等等,都不起作用。我最终使用了一个笨拙的for循环,但似乎应该有一种更像“R”的方法来实现它。有人能推荐一种方法吗?

您正在寻找的是
因子

as.numeric(factor(x))

# [1] 1 1 1 5 2 2 2 2 2 7 7 7 7 7 6 4 4 4 3 3 3 3
默认情况下,这一个按字母顺序排列。如果您不希望(例如:
Nathan的
2而不是
5
),请执行以下操作:


您正在查找
系数

as.numeric(factor(x))

# [1] 1 1 1 5 2 2 2 2 2 7 7 7 7 7 6 4 4 4 3 3 3 3
默认情况下,这一个按字母顺序排列。如果您不希望(例如:
Nathan的
2而不是
5
),请执行以下操作:


这是一个先将其转换为因子的技巧:

> x <- c('David', 'David', 'Lena', 'David')
> as.factor(x)
[1] David David Lena  David
Levels: David Lena
> y <- as.factor(x)
> y
[1] David David Lena  David
Levels: David Lena
> as.numeric(y)
[1] 1 1 2 1
>x作为系数(x)
[1] 大卫大卫莉娜大卫
级别:David Lena
>y y
[1] 大卫大卫莉娜大卫
级别:David Lena
>as.数字(y)
[1] 1 1 2 1

这是一个先将其转换为因子的技巧:

> x <- c('David', 'David', 'Lena', 'David')
> as.factor(x)
[1] David David Lena  David
Levels: David Lena
> y <- as.factor(x)
> y
[1] David David Lena  David
Levels: David Lena
> as.numeric(y)
[1] 1 1 2 1
>x作为系数(x)
[1] 大卫大卫莉娜大卫
级别:David Lena
>y y
[1] 大卫大卫莉娜大卫
级别:David Lena
>as.数字(y)
[1] 1 1 2 1

关于使用
因子,我没有什么特别负面的意见,但是您可以通过查看
匹配
,了解一个额外的技巧和一个非常有用的函数:

> dat <- scan(what="")
1:  David    David    David    Nathan   Holly    Holly    Holly    Holly   
9:  Holly    Sue      Sue      Sue      Sue      Sue      Rene     Michelle
17:  Michelle Michelle Jennie   Jennie   Jennie   Jennie  
23: 
Read 22 items
> match(dat, unique(dat))
 [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
dat匹配(dat,唯一(dat)) [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
关于使用
因子,我没有什么特别负面的意见,但是您可以通过查看
匹配
,了解一个额外的技巧和一个非常有用的函数:

> dat <- scan(what="")
1:  David    David    David    Nathan   Holly    Holly    Holly    Holly   
9:  Holly    Sue      Sue      Sue      Sue      Sue      Rene     Michelle
17:  Michelle Michelle Jennie   Jennie   Jennie   Jennie  
23: 
Read 22 items
> match(dat, unique(dat))
 [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
dat匹配(dat,唯一(dat)) [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7