r - 如何使用 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 语句不起作用。它只是无限期地运行。
解决方案
您不必对 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),]
推荐阅读
- javascript - 所有具有类名的元素在 JS 中都有 html
- windows - 用于删除以“。”开头的文件夹的 Powershell 脚本 不起作用 - 为什么?
- html - 如何有条件地将css应用于不同的嵌套内容
- osgi - 如何在 OSGI 注释中配置 servlet 资源类型
- r - 如何解决 R 光栅镶嵌错误:“数据”必须是矢量类型,是否为“NULL”?
- mocha.js - 测试用例内部的`before`钩子(`it`)
- mongodb - 在 Power BI 中将 MongoDB id 转换为日期时间
- powershell - 自动化 Powershell 凭据以更改域和名称
- r - PCA中图例颜色的小问题,是错误还是我的脚本写错了?
- dart - 如何处理 NetworkImage GET 错误?