用查找表dplyr替换字符串

用查找表dplyr替换字符串,r,string,dplyr,R,String,Dplyr,我正试图在R中创建一个查找表,以便获得与我所在公司相同格式的数据 它涉及我想使用dplyr合并的不同教育类别 library(dplyr) # Create data education <- c("Mechanichal Engineering","Electric Engineering","Political Science","Economics") data <- data.frame(X1=replicate(1,sample(education,1000,r

我正试图在R中创建一个查找表,以便获得与我所在公司相同格式的数据

它涉及我想使用dplyr合并的不同教育类别

library(dplyr)

# Create data
education <- c("Mechanichal Engineering","Electric Engineering","Political Science","Economics")

    data <- data.frame(X1=replicate(1,sample(education,1000,rep=TRUE)))

    tbl_df(data)

    # Create lookup table
    lut <- c("Mechanichal Engineering" = "Engineering",
             "Electric Engineering" = "Engineering",
             "Political Science" = "Social Science",
             "Economics" = "Social Science")

    # Assign lookup table
    data$X1 <- lut[data$X1]
库(dplyr)
#创建数据

教育我发现最好的方法是使用
car
软件包中的
recode()

# Observe that dplyr also has a recode function, so require car after dplyr
    require(dplyr)
    require(car)
数据是从四个教育类别中抽取的

    education <- c("Mechanichal Engineering",
                   "Electric Engineering","Political Science","Economics")

data <- data.frame(ID = c(1:1000), X1 = replicate(1,sample(education,1000,rep=TRUE)))
若要查看其执行是否正确,请将原始数据和重新编码的数据合并

data <- full_join(data, lut, by = "ID")

head(data)

   ID                     X1             X2
1  1       Political Science Social Science
2  2               Economics Social Science
3  3    Electric Engineering    Engineering
4  4       Political Science Social Science
5  5               Economics Social Science
6  6 Mechanichal Engineering    Engineering

data
education我自己也在想办法。我对我找到的大多数解决方案都不太满意,所以这里是我最后的结论。我添加了一个“other”类别,以表明即使在查找表中没有定义值,它也可以工作

库(dplyr)
#创建数据
教育1电气工程
#>2其他
#>3其他
#>4其他
#>5其他
#>6政治学社会科学
#>7其他
#>8经济社会科学
#>9政治科学社会科学
#>10电气工程
#>11经济社会科学
#>12经济社会科学
#>13机械工程
#>14经济社会科学
#>15政治学社会科学
#>16其他
#>17其他
#>18其他
#>19机械工程
#>20政治学社会科学

请在您的问题中包含
dput(数据)
。一般来说,请确保您提供的示例代码可以由其他人运行(将注释保留在
#
之后,不要更改数据/数据的大小写)。以下是关于
Data$education@Frank谢谢的指南。固定的。但是,我同意一个可复制的例子应该存在问题,也许使用连接到首选值的映射可能更有效?这种方法的问题是,如果我只想重新编码一个字符串,那么我的新变量将包含多个NA。如果我有一个包含大量字符串的数据集,但只想对其中的一些字符串重新编码,那么这就是一个问题。请展开一点。你是说如果你只想用工程来取代机械工程,而忽略其他的一切?没错。考虑一下,如果我有1000个不同的因素,只想重命名它们中的一些,或者在这种情况下,将不同的因素合并在一起。然后,此解决方案将产生一个新变量,其中未显式重命名的每个因子都将为N/a。
data <- full_join(data, lut, by = "ID")

head(data)

   ID                     X1             X2
1  1       Political Science Social Science
2  2               Economics Social Science
3  3    Electric Engineering    Engineering
4  4       Political Science Social Science
5  5               Economics Social Science
6  6 Mechanichal Engineering    Engineering
education <- c("Mechanichal Engineering","Electric Engineering","Political Science","Economics")
lut <- list("Mechanichal Engineering" = "Engineering",
            "Electric Engineering" = "Engineering",
            "Political Science" = "Social Science",
            "Economics" = "Social Science")
lut2<-melt(lut)
data1 <- data.frame(X1=replicate(1,sample(education,1000,rep=TRUE)))
data1$new <- lut2[match(data1$X1,lut2$L1),'value']
head(data1)


=======================  ==============
X1                       new           
=======================  ==============
Political Science        Social Science
Political Science        Social Science
Mechanichal Engineering  Engineering   
Mechanichal Engineering  Engineering   
Political Science        Social Science
Political Science        Social Science
=======================  ==============