如何在R中构造和重新编码凌乱的分类数据?

时间:2010-05-04 23:43:35

标签: r statistics plyr

我正在努力解决如何最好地构建混乱的分类数据,并且来自dataset我需要清理。

编码方案

我正在分析大学科学课程考试的数据。我们正在研究模式 学生的反应,我们开发了一种编码方案来代表各种事物 学生正在回答他们的问题。编码方案的子集如下所示。

请注意,每个主要代码(1,2,3)都是嵌套的非唯一子代码(a,b,...)。

原始数据的样子

我已创建了实际数据的匿名原始子集,您可以查看here。 我的部分问题是编码数据的人注意到有些学生表现出来了 多种模式。编码员的解决方案是创建足够的列(reason1reason2, ...)让学生拥有多种模式。这很重要,因为订单 (reason1reason2)是任意的 - 两个学生(就像我的学生41和学生42) 正确应用“依赖”的dataset)应该在分析中注册,无论如何 3a列或reason列中是否显示reason2

我如何才能最好地构建学生数据?

我的部分问题是在raw data中,并非所有学生都显示相同的内容 模式或它们的数量相同,顺序相同。有些学生可能只做一个 事情,其他人可能会做几件事。因此,示例学生的抽象表示可能 看起来像这样:

请注意,在上面的示例中,student002student003都被编码为“1b”,尽管我故意将顺序显示为不同以反映my data的实际情况。< / p>

我的(实际)问题

  1. 我应该将reason1reason2...连接到一列吗?
  2. 我如何(重新)编码R中的reason以反映某些学生的多样性?
  3. 感谢

    我意识到这个问题与良好的数据概念化有关,因为它与R的特定功能有关,但我认为在这里提出这个问题是合适的。如果您觉得我提出这个问题是不合适的,请在评论中告诉我,stackoverflow会自动使用sadface表情符号填充我的收件箱。如果我不够具体,请告诉我,我会尽力让自己更清楚。

3 个答案:

答案 0 :(得分:5)

让它“长”:

library(reshape)
dnow <- read.csv("~/Downloads/catsample20100504.csv")
dnow <- melt(dnow, id.vars=c("Student", "instructor"))
dnow$variable <- NULL ## since ordering does not matter
subset(dnow, Student%in%c(41,42)) ## see the results

下一步做什么将取决于您想要进行的分析类型。但是长格式对于像你这样的不规则数据很有用。

答案 1 :(得分:2)

如果要考虑不同的原因,你应该使用plyr中的ddply并拆分所有列,如果你想忽略它们,请不要在拆分中使用这些列。你需要首先清理一些问号和额外的东西。

x <- ddply(data, c("split_column1", "split_column3" etc),
           summarize(result_df, stats you want from result_df))

答案 2 :(得分:1)

你试图回答的(大图)问题是什么?为什么这些信息对你有意思?

您是否只是想找到一些模式,例如“如果学生这样做,那么他们也可能会这样做”?

如果是这种情况我会考虑的事情 - 将数据集拆分为较小的随机样本以进行分析,以降低误报的风险。

虽然有趣的问题!