我是一个相对较新的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之前尝试过滤它,但是当我有空白时它不会读取数据文件,我希望能够使用整个数据集而不为每个问题创建一个子集(如果我有必要,我会这样做...如果有更好的代码或包使用它只是耗费时间)
非常感谢任何帮助!
答案 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")