根据R中的数值条件创建一个新的字符值列?

时间:2015-11-22 01:40:23

标签: r

如何根据要赋予以下名称的数值创建新的字符值列:0 = user,1 = admin,2 = sponsor

dat1 
       one  two three
1     Bob    0  
2     Mary   0  
3 restaurant 2  
4   company  1  

所以基于这些名称,我该如何做到这一点:

dat1 
       one  two three
1     Bob    0  user
2     Mary   0  user
3 restaurant 2  sponsor
4   company  1  admin

dat1 <- data.frame(one=c("Bob", "Mary", "restaurant", "company"), two=c("0","0", "2", "1"))

是的,我知道如何通过以下方式创建它们:

dat1 <- data.frame(one=c("Bob", "Mary", "restaurant", "company"), two=c("0","0", "2", "1"), three=c("user", "user", "sponsor", "admin"))

但是什么是预先形成任务的功能? 所以在第三列下,基于第二列下的相应行,我想要0 =用户,1 =管理员,2 =赞助商。

1 个答案:

答案 0 :(得分:1)

在您的示例中,two列是一个因素。 dat1$two作为因子的整数表示为1表示0表示,2表示1表示,3表示2表示。因此,如果我们将其用作我们想要获得的字符向量的索引向量,我们可以扩展相应的向量。

dat1$three <- c("user", "admin", "sponsor")[dat1$two]
dat1
#          one two   three
# 1        Bob   0    user
# 2       Mary   0    user
# 3 restaurant   2 sponsor
# 4    company   1   admin

如果您在two列中没有因素,则可以将其与以下内容合并为一个。

dat1$three <- c("user", "admin", "sponsor")[as.factor(dat1$two)]

这些都会创建一个新的字符列。

更新:正如弗兰克所提到的,更惯用的方法是简单地考虑two列并应用不同的标签。

dat1$three <- factor(dat1$two, labels = c("user", "admin", "sponsor"))

这会创建一个新的因子列。