我的因素包含Single (w/children)
,Married (no children)
,Single (no children)
等形式的值,并希望将这些因素分为两个因素,一个是婚姻状况的多值因素和二进制值的儿童。
我如何在R?
中执行此操作答案 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