选择字符串并在逻辑表达式中使用以创建新变量 - R.

时间:2013-04-08 15:32:03

标签: r string

我有一个分类变量,表明流感诊所的位置以及“其他”类别。选择“其他”类别的参与者会为其所在地提供开放式回复。在大多数情况下,这些开放式回答符合现有类别之一(例如,一个类别是“公共卫生诊所”,但一些受访者选择“其他”并引用“商城”,这是一个公共卫生诊所)。我可以轻松地手工完成这项工作,但想学习选择“商城”字符串的代码,然后使用逻辑表达式将这些人分配到“公共卫生诊所”(例如,为流感诊所的位置创建一个新变量)。

我的分类变量是“lrecflu2”,我的字符串变量是“lfother”

到目前为止,我有:

mall <- grep("MALL", Motiv82012$lfother, value = TRUE)

这给了我一个包含所有字符串响应的向量,其中包含“MALL”(所有字符串都在数据框中为大写字母)

如何在逻辑表达式中使用此向量来创建新变量,将这些人分配到“公共卫生诊所”类别,并为未选择“其他”的人分配流感诊所位置变量的原始值(并且新的流感诊所位置变量中没有字符串变量中的值?

也许,grep甚至不是正确使用的功能。

1 个答案:

答案 0 :(得分:0)

据我了解,您在数据框中有一列,您希望将一个字符值重新分配给另一个字符。如果是这样,你几乎就在那里......

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是具有模式特征的因子还是向量不会影响事物。 {{1}}默认情况下会将字符串向量强制转换为因子。