【发布时间】:2019-08-07 23:39:38
【问题描述】:
全新的 R 和堆栈。希望我问的这个问题是正确的。
我有许多字符串变量需要重新编码为唯一列。数据是从一项调查中收集的。例如,如果受访者选择“2-black”和“22-hispanic”,则数据在变量“string”中记录为“2;22”。
我需要将变量重新编码为唯一的二进制变量,其名称为:“Black”、“White”、“Hispanic”等。应通过在字符串值。
我尝试使用“grepl”编写函数,但效果不佳。首先,我必须从数据框中创建一个对象“字符串”(不包括代码)。然后我遇到了区分“2”和“22”的问题。
如果您运行下面的代码,您会发现它没有按预期工作
strg_to_many<-function(newcol, string, number) {
for (i in 1:length(number)){
string<-newcol[I]
df_temp[string]<-grepl(number[i], df_temp$string)
}
return(df_temp)
}
df_temp<-data.frame(string=c("22;2", "20", "40,20", "2"))
newcol<-c("black" , "white", "hispanic", "other")
number<-c("2", "20", "22", "40")
string<-c("22;2", "20", "40;20", "2")
df <- strg_to_many(newcol, string, number)
我期望的输出是:
- 字符串黑色白色西班牙裔其他
- 22;2 真假真假
- 20 FALSE TRUE FALSE FALSE
- 40;20 假真假真
- 2 真假假假
感谢您的帮助!
【问题讨论】:
-
您希望
40,20发生什么?那会是Other == TRUE和white == TRUE吗?在两个数字的情况下,它们是如何分开的?在您的示例中,您似乎同时有分号和逗号。如果您要为您提供的样本数据(不仅仅是一行)提供完整的预期输出,这将有所帮助。 -
我的错误,对不起。它们应该用“;”分隔