我有一个具有 , , 等形式的值的因子Single (w/children)
,Married (no children)
并且Single (no children)
想将它们分成两个因子,一个用于婚姻状况的多值因子,一个用于儿童的二值因子。
我如何在 R 中做到这一点?
我有一个具有 , , 等形式的值的因子Single (w/children)
,Married (no children)
并且Single (no children)
想将它们分成两个因子,一个用于婚姻状况的多值因子,一个用于儿童的二值因子。
我如何在 R 中做到这一点?
一些示例数据
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)
查找字符串“ grepl
no 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)",""))
已婚状态的命令有效,但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