0

我有一个具有 , , 等形式的值的因子Single (w/children)Married (no children)并且Single (no children)想将它们分成两个因子,一个用于婚姻状况的多值因子,一个用于儿童的二值因子。

我如何在 R 中做到这一点?

4

1 回答 1

2

一些示例数据

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)


更多信息

这会拆分每个有“ (”的元素 - 您需要使用 \\ 转义 '(' 因为它是一个特殊字符。

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

然后我们通过选择第一项来对其进行子集化

sapply(s , "[" , 1)

查找字符串“ greplno children”并返回 TRUE 或 FALSE

grepl("no children" , df$status)

我们使用 ifelse 进行二分法




编辑

重新评论:在数据中添加一些空字符串(“”)[注意:通常最好将它们作为缺失(NA)而不是空字符串。您可以在读取数据时执行此操作,即。read.table你可以使用参数na.strings(na.strings=c(NA,"")]。

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

已婚状态的命令有效,但greplifelse 无效。作为快速修复,您可以在 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
于 2014-04-16T00:04:14.500 回答