用查找表dplyr替换字符串
我正试图在R中创建一个查找表,以便获得与我所在公司相同格式的数据 它涉及我想使用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
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
dataeducation我自己也在想办法。我对我找到的大多数解决方案都不太满意,所以这里是我最后的结论。我添加了一个“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
======================= ==============