【问题标题】:(Select all that apply) survey answers in R dataframe(选择所有适用的)R 数据框中的调查答案
【发布时间】:2015-12-17 01:28:07
【问题描述】:

我正在使用带有 Rstudio 的 Windows7。我有一个数据框,其中有几列包含 4 个答案或 NA 的因子混合(4 个答案,选择所有适用或选择无)。我有一个地狱般的时间来划分级别,以便我可以知道有多少受访者选择了。

data<- c("cats", "dogs", "cats, dogs", "cats, dogs, birds(with, commas, randomly)")
data<-data.frame(as.factor(data))
df<-as.data.frame(cbind((1:100),data))
df[,1]<-NULL
df

我如何表明用户选择了狗(一个级别)和猫(另一个级别),而不是选择狗和猫(作为一个级别,分开狗和/或猫)?

也就是说,我如何显示: 狗是 1 猫是 2 狗和猫是1,2 狗、猫和鸟是 1,2,3,当然不会遇到逗号问题,如果必要的话也可能以其他方式出现

我在 Google 上上下搜索过,但就是不明白。我无法正确使用 mChoice 函数(Hmisc 包)并且遇到各种问题。我希望我能在这门课程中找到解决方案,特别是,但我相信无济于事。

感谢您的帮助。

【问题讨论】:

  • 你真的需要100行样本数据吗?也请用给定的输入显示所需的输出。
  • 那么想要的结果是什么?最后一个字符串中有(with, commas, randomly)。是保留还是删除?

标签: r


【解决方案1】:

我们可以试试gsubfn

library(gsubfn)
gsubfn('\\w+', list('dogs'=1, 'cats'=2, 'birds'=3), data)
#[1] "2"       "1"       "2, 1"    "2, 1, 3"

注意:我假设(with, commas, randomly) 部分就像说etc...。即使它已经存在于数据中,gsubfn 解决方案也会返回输出。


或者另一种选择是拆分字符串,然后转换为factor 并强制转换为numeric

sapply(strsplit(data, ',\\s*'), function(x)
    toString(as.numeric(factor(x, levels=c('dogs', 'cats', 'birds')))))
#[1] "2"       "1"       "2, 1"    "2, 1, 3"

数据

data <- c("cats", "dogs", "cats, dogs", "cats, dogs, birds")

【讨论】:

  • 这正是我需要对实际数据框执行的操作。如何将三个可能的响应转换为读取 1、2 和 3(如果没有响应,则为 NA),以便在分析该列与性别列之间的关系时可以使用这些响应?本质上,您上面显示的内容向我展示了我希望在数据框中看到哪种类型的结果,但是如何转换数据框以显示这些类型的答案?我希望能够在图表中显示这么多用户选择了选项 1 和这么多的选项 2,但不让选择 1 和 2 的用户完全分开
  • @jnowat 我不完全确定你想要什么。如果要拆分字符串。 v1 &lt;- gsubfn('\\w+', list('dogs'=1, 'cats'=2, 'birds'=3), data); lapply(strsplit(v1, ', '), as.numeric) 应该会给你预期的输出。
  • &gt; sapply(strsplit(new$gender, ',\\s*'), function(x) + toString(as.numeric(factor(x, levels=c('Male','Female'))))) Error in strsplit(new$gender, ",\\s*") : non-character argument 我不断收到消息说我的数据框列中的项目不是字符,所以我如何将其应用于因素(即 new$gender 是“男性”,“女性” ,或“NA”)?了解了这一点后,我可以接受这个答案,并提出另一个关于拆分 1、2、3 等的问题。在分析中分开。谢谢你帮助我,在这里
  • @jnowat 好像gender 列是factor 可以用strsplit(as.character(new$ecup2$gender), ....
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2021-05-05
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2022-01-08
相关资源
最近更新 更多