使用部分字符串匹配创建指示符变量

时间:2014-10-07 19:34:05

标签: r pattern-matching

我正在尝试为我的数据中的不同种族/种族创建指标变量。在我的数据中(' mydata')我有一个名为" Race"的变量。该变量具有在调查问卷上按比赛标记的人的每个框的输出。所以它看起来像这样:

ID   Race
6    American Indian or Alaska Native, Black or African American, Hispanic or Latino
7    Hispanic or Latino
10   Native Hawaiian or Other Pacific Islander
11   Hispanic or Latino, White
29   White
30   Black or African American
31   American Indian or Alaska Native, Hispanic or Latino, White

我想创建一个变量,以便如果某人例如说他们是西班牙裔,忽略了他们所说的话,在新的"西班牙裔"变量他们会得到一个" 1"或者,如果他们没有说他们是西班牙裔,那么"西班牙裔"会得到一个0.

我知道这需要使用部分字符串匹配,但是我很难获得我想要的输出。我做了多次尝试,运气不大。这是我上一次尝试的代码:

if(mydata[grep("Hispanic", mydata$Race)]) {
  Hispanic<-1
 } else {
  Hispanic<-0
 }      

2 个答案:

答案 0 :(得分:4)

您可以使用grepl&#34;返回逻辑向量(对于x的每个元素是否匹配)&#34; (来自?grepl)。然后,可以使用FALSE将生成的逻辑向量转换为0(TRUE)或1(as.integer):

mydata$Hispanic <- as.integer(grepl(pattern = "Hispanic", x = mydata$Race))
mydata$Hispanic
# [1] 1 1 0 1 0 0 1

答案 1 :(得分:4)

另一种选择:

重新创建数据

mydata <- read.table(
  header = T, con <- textConnection
  ('
ID Race
6 "American Indian or Alaska Native, Black or African American, Hispanic or Latino"
7 "Hispanic or Latino"
   10 "Native Hawaiian or Other Pacific Islander"
   11 "Hispanic or Latino, White"
   29 "White"
   30 "Black or African American"
   31 "American Indian or Alaska Native, Hispanic or Latino, White"
   '), stringsAsFactors = FALSE, fill = TRUE, strip.white = TRUE)
close(con)

使用data.table

library(data.table)
setDT(mydata); setkey(mydata, Race)
mydata[grep("hispanic", Race, ignore.case=T), Race_x := 1]
mydata[is.na(Race_x), Race_x := 0][]

   ID                                                                            Race Race_x
1:  6 American Indian or Alaska Native, Black or African American, Hispanic or Latino      1
2: 31                     American Indian or Alaska Native, Hispanic or Latino, White      1
3: 30                                                       Black or African American      0
4:  7                                                              Hispanic or Latino      1
5: 11                                                       Hispanic or Latino, White      1
6: 10                                       Native Hawaiian or Other Pacific Islander      0
7: 29                                                                           White      0