我需要用字符串B替换字符串A,只有当字符串A是整个单词(例如"MECH")时,我不想在A是较长字符串的一部分时进行替换(例如"MECHANICAL") .到目前为止,我有一个grepl(),它检查字符串A是否是一个完整的字符串,但我无法弄清楚如何进行替换.我添加了一个ifelse(),当grep()返回TRUE时,想要更换gsub(),否则不要替换.有什么建议?请参阅下面的代码.谢谢.
aa <- data.frame(type = c("CONSTR", "MECH CONSTRUCTION", "MECHANICAL CONSTRUCTION MECH", "MECH CONSTR", "MECHCONSTRUCTION"))
from <- c("MECH", "MECHANICAL", "CONSTR", "CONSTRUCTION")
to <- c("MECHANICAL", "MECHANICAL", "CONSTRUCTION", "CONSTRUCTION")
gsub2 <- function(pattern, replacement, x, ...) {
for(i in 1:length(pattern)){
reg <- paste0("(^", pattern[i], "$)|(^", pattern[i], " )|( ", pattern[i], "$)|( ", pattern[i], " )")
ifelse(grepl(reg, aa$type),
x <- gsub(pattern[i], replacement[i], x, ...),
aa$type)
}
x
}
aa$title3 <- gsub2(from, to, aa$type)
Run Code Online (Sandbox Code Playgroud) 如何使用"采样"包在R中创建分层样本?我的数据集有355,000个观测值.代码在最后一行工作正常.下面是我写的代码,但我总是得到以下消息:"sort.list(y)中的错误:'x'必须是'sort.list'的原子'你在列表上调用了'sort'吗?"
请不要指向Stackoverflow上的旧消息.我研究了它们,但一直无法使用它们.谢谢.
## lpdata file has 355,000 observations
# Exclude Puerto Rico, Virgin Islands and Guam
sub.lpdata<-subset(lpdata,"STATE" != 'PR' | "STATE" != 'VI' | "STATE" != 'GU')
## Create a 10% sample, stratified by STATE
sort.lpdata<-sub.lpdata[order(sub.lpdata$STATE),]
tab.state<-data.frame(table(sort.lpdata$STATE))
size.strata<-as.vector(round(ceiling(tab.state$Freq)*0.1))
s<-strata(sort.lpdata,stratanames=sort.lpdata$STATE,size=size.strata,method="srswor")}
Run Code Online (Sandbox Code Playgroud) 如何在单个向量中组合所有状态名称,而不是单独列出所有逻辑排除?我在CRAN网站上发现了函数%notin%,但R不承认是一个合法的函数.
indata <- indata[which(indata$STATE != "GU" & indata$STATE != "WY" &
indata$STATE != "KS" & indata$STATE != "ME" &
indata$STATE != "MT" & indata$STATE != "ND" &), ]
Run Code Online (Sandbox Code Playgroud)
谢谢.