过滤大型数据集以在所有列中排除相同的元素

时间:2011-07-01 16:27:47

标签: r

我是一个相对较新的R用户,大多数复杂的编码(和包)看起来像希腊语。自从我使用编程语言(Java / Perl)以来已经很长时间了,我过去只使用R进行非常简单的操作(来自文件的基本加载数据,子集,ANOVA / T-Test)。但是,我正在开发一个项目,我无法控制数据布局,数据文件非常冗长。

在我的数据中,我有172行,其中包含调查参与者和158列,每列代表问题编号。每个人的答案是1-5。原始数据包括数字“99”以表示未回答问题。如果参与者没有回答而不排除整个参与者,我需要排除任何问题。

Part  Q001  Q002  Q003  Q004
1      2      4    99    2
2      3      99   1     3
3      4      4    2     5
4      99     1    3     2
5      1      3    4     2

过去我使用子集功能来过滤我的数据 data.filter< - subset(data,Q001!= 99) 当我使用集合时,哪个工作正常,我的所有答案都包含在一列中。然后,这将删除答案不可用的整行。

然而,由于此集合中的答案分布在158列中,如果我在第1列(Q001)中对99进行了子集,我也会过滤掉整个参与者。

我想知道是否有办法对数据进行过滤/子集,以便当“99”发生时,我的大数据集最终会出现“空白”,这样这些99就不会膨胀或以其他方式干扰我运行其余数字的统计数据。我需要能够计算每个问题的均值并对各种问题进行ANOVA和T-Tests。

Resp  Q001  Q002  Q003  Q004
1      2      4          2
2      3           1     3
3      4      4    2     5
4             1    3     2
5      1      3    4     2

这可以在R中做到吗?我在提交给R之前尝试过滤它,但是当我有空白时它不会读取数据文件,我希望能够使用整个数据集而不为每个问题创建一个子集(如果我有必要,我会这样做...如果有更好的代码或包使用它只是耗费时间)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您可以将“99”替换为“NA”并计算省略NA的colMeans:

df <- replicate(20, sample(c(1,2,3,99), 4))
colMeans(df) # nono

dfc <- df
dfc[dfc == 99] <- NA
colMeans(dfc, na.rm = TRUE) 

答案 1 :(得分:2)

您还可以在读取数据库时指明哪些值是NA。对于您的特定情况:

mydata <- read.table('dat_base', na.strings = "99")