如何根据要赋予以下名称的数值创建新的字符值列: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 =赞助商。
答案 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"))
这会创建一个新的因子列。