首页 > 解决方案 > 如何使用 grep 或 grepl 在数据框中创建新变量以简化分类变量中的级别

问题描述

我正在使用 grep 和 grepl 搜索字符变量并创建简化级别。

我试图在数据框中获取结果。我也尝试过使用 if 和 else if 语句并仅指定变量。我附上了这段代码,for if 语句没有运行。

for(i in 1:length(D$ID)){
if(grepl("Bachelor",  D$NDEGREE)[i]){D$NDegree[i] <- "Bachelors"}
else if(grepl("BS", D$NDEGREE)[i]){D$NDegree[i] <- "Bachelors"}
else if (grepl("Master", D$NDEGREE)[i]){D$NDegree[i] <- "Masters"}
else if(grepl("Doctor", D$NDEGREE)[i]){D$NDegree[i] <- "Doctors"}
else(D$NDegree[i] <- D$NDEGREE[i])}

Bachelors <-  D[grep("Bachelor", D$NDEGREE),]
BS <-  D[grep("BS", D$NDEGREE),]
Masters <- D[grep("Master", D$NDEGREE),]
Doctors <- D[grep("Doctor", D$NDEGREE),]

编辑:我也试过

D$NDEGREE <- gsub("Bachelor", "Bachelors", D$NDEGREE)
D$NDEGREE <- gsub("BS", "Bachelors", D$NDEGREE)
D$NDEGREE <- gsub("Master", "Masters", D$NDEGREE)
D$NDEGREE <- gsub("Doctor", "Doctors", D$NDEGREE)

这只是通过,但没有任何反应。for if 语句不起作用。它只是无限期地运行。

标签: rdataframevariables

解决方案


您不必对 R 中的列进行循环。只需使用矢量化操作。这是将函数应用于整个向量的操作。使用该gsub函数重新编码值。

df <- data.frame(
  NDEGREE =c("Bachelor", "Master", "Doctor", "BS"),
  Value = c(1,1,1,1)
)


df$NDEGREE <- gsub("Bachelor", "Bachelors", df$NDEGREE)
df$NDEGREE <- gsub("BS", "Bachelors", df$NDEGREE)
df$NDEGREE <- gsub("Master", "Masters", df$NDEGREE)
df$NDEGREE <- gsub("Doctor", "Doctors", df$NDEGREE)


Bachelors <- df[grep("Bachelors", df$NDEGREE),]
Doctors <- df[grep("Doctors", df$NDEGREE),]
Masters <- df[grep("Masters", df$NDEGREE),]

推荐阅读