据我了解,您在数据框中有一列,您希望将一个字符值重新分配给另一个。如果是这样,你几乎在那里......
set.seed(1) # for generating an example
df1 <- data.frame(flu2=sample(c("MALL","other","PHC"),size=10,replace=TRUE))
df1$flu2[grep("MALL",df1$flu2)] <- "PHC"
这grep()
是为您提供所需的矢量索引;然后,您基于此对向量进行子集化并更改这些元素。
更新 2
这应该会产生data.frame
与您正在使用的类似的结果:
set.seed(1)
lreflu2 <- sample(c("PHC","Med","Work","other"),size=10,replace=TRUE)
Ifother <- rep("",10) # blank character vector
s1 <- c("Frontenac Mall","Kingston Mall","notMALL")
Ifother[lreflu2=="other"] <- s1
df1 <- data.frame(lreflu2,Ifother)
### alternative:
### df1 <- data.frame(lreflu2,Ifother, stringsAsFactors = FALSE)
df1
给出:
lreflu2 Ifother
1 Med
2 Med
3 Work
4 other Frontenac Mall
5 PHC
6 other Kingston Mall
7 other notMALL
8 Work
9 Work
10 PHC
如果您正在寻找完全不需要的字符串匹配grep
:
df1$lreflu2[df1$Ifother=="MALL"] <- "PHC"
使用regex
:
df1$lreflu2[grep("Mall",df1$Ifother)] <- "PHC"
给出:
lreflu2 Ifother
1 Med
2 Med
3 Work
4 PHC Frontenac Mall
5 PHC
6 PHC Kingston Mall
7 other notMALL
8 Work
9 Work
10 PHC
是否Ifother
是具有模式字符的因子或向量不会影响事物。data.frame
默认情况下将强制字符串向量转换为因子。