【发布时间】:2022-01-14 04:37:19
【问题描述】:
我有一个来自调查平台的大 df 文件。这些列包含一个带有所有潜在答案的问题(作为标题)。我正在尝试将每个答案列分成一组新列(答案名称作为新列的名称)。
之后,我希望每个新列都表明该值是否出现在原始列中(带有“1”),以便更轻松地处理数据
df<-data.frame("name"= c("John","mark","bell","elsa"),"what do you like to
eat"=c("apple","fries apple","peach","bread"))
原始文件
| name | What.do.you.like.to.eat |
|---|---|
| John | apple |
| Mark | fries apple |
| bell | peach |
| elsa | bread |
我正在使用这个有效的代码,但我确信必须有更有效/更简单的方法,因为我有超过 50 个这样的列。
df<-df %>%
separate(what.do.you.like.to.eat, c("apple","fries","peach","bread",NA ), remove = F)
df[,3:6]<-""
{
df[,3] = with(df, ifelse(grepl("apple", df$what.do.you.like.to.eat,ignore.case = T),
paste('1', df[,3]),
paste("", df[,3])))
df[,4] = with(df, ifelse(grepl("fries", df$what.do.you.like.to.eat,ignore.case = T),
paste('1', df[,4]),
paste("", df[,4])))
df[,5] = with(df, ifelse(grepl("peach", df$what.do.you.like.to.eat,ignore.case = T),
paste('1', df[,5]),
paste("", df[,5])))
df[,6] = with(df, ifelse(grepl("bread", df$what.do.you.like.to.eat,ignore.case = T),
paste('1', df[,6]),
paste("", df[,6])))
}
希望输出
| name | What.do.you.like.to.eat | apple | fries | peach | bread |
|---|---|---|---|---|---|
| John | apple | 1 | |||
| Mark | fries apple | 1 | 1 | ||
| bell | peach | 1 | |||
| elsa | bread | 1 |
【问题讨论】:
-
老实说,我很难理解它有点含糊,所以您能否提供数据样本和预期结果样本?
-
刚做了,投错了没有例子