R中的分裂因子

时间:2014-04-15 23:10:02

标签: r categorical-data

我的因素包含Single (w/children)Married (no children)Single (no children)等形式的值,并希望将这些因素分为两个因素,一个是婚姻状况的多值因素和二进制值的儿童。

我如何在R?

中执行此操作

1 个答案:

答案 0 :(得分:3)

一些示例数据

df <- data.frame(status=c("Domestic partners (w/children)", "Married (no
  children)", "Single (no children)"))

结婚状态超出字符串。这假定婚姻状况是字符串中的第一个单词。如果没有,您可以使用grepl

执行此操作
df$married <- sapply(strsplit(as.character(df$status) , " \\(") , "[" , 1)

# Change to factor
df$married <- factor(df$married , levels=c("Single" , "Married", 
                                                 "Domestic partners"))

从字符串中获取子状态

df$ch <- ifelse(grepl("no children" , df$status) , 0 , 1)


更多信息

将每个元素拆分为有&#34; (&#34; - 你需要逃避&#39;(&#39;与\\,因为它是一个特殊的角色。

s <- strsplit(as.character(df$status) , " \\(") 

然后,我们通过选择第一个术语

对其进行子集化
sapply(s , "[" , 1)

grepl查找字符串&#34;没有孩子&#34;并返回TRUE或FALSE

grepl("no children" , df$status)

我们使用ifelse进行二分法




修改

重新评论:在数据中添加一些空字符串(&#34;&#34;)[注意:不要使用空字符串,通常最好将这些字符串丢失(NA)。您可以在阅读数据时执行此操作,即。在read.table中,您可以使用na.strings参数(na.strings = c(NA,&#34;&#34;)]。

    df <- data.frame(status=c("Domestic partners (w/children)", "Married 
   (no children)", "Single (no children)",""))

结婚状态的命令有效,但grepl和ifelse不会。作为快速修复,您可以在ifelse之后添加。

df$ch[df$status==""] <- NA 

或者如果你设法将空字符串设置为缺失

df$ch[is.na(df$status)] <- NA 

运行上面的命令,这就是

#                          status           married ch
# 1 Domestic partners (w/children) Domestic partners  1
# 2          Married (no children)           Married  0
# 3           Single (no children)            Single  0
# 4                                             <NA> NA