0

我有一个分类变量,指示流感诊所的位置以及“其他”类别。选择“其他”类别的参与者对他们的位置给出开放式回答。在大多数情况下,这些开放式回答符合现有类别之一(例如,一个类别是“公共卫生诊所”,但一些受访者选择“其他”并引用“商场”,即公共卫生诊所)。我可以很容易地手动完成,但想学习代码来选择“商场”字符串,然后使用逻辑表达式将这些人分配给“公共卫生诊所”(例如,为流感诊所的位置创建一个新变量)。

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

到目前为止,我有:

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

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

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

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

4

1 回答 1

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默认情况下将强制字符串向量转换为因子。

于 2013-04-08T16:57:14.643 回答