我是一个相对较新的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<-子集(数据,Q001!=99(当我使用所有答案都包含在一列中的集合时,这很好。然后,这只会删除没有答案的整行。
然而,由于这一集中的答案分布在158列中,如果我在第1列(Q001(中分出99个子集,我也会过滤掉整个参与者。
我想知道是否有一种方法可以过滤/子集数据,这样当"99"出现时,我的大数据集就会出现"空白",这样这些99就不会膨胀或干扰我对其余数字的统计。我需要能够计算每个问题的平均数,并对各种问题进行方差分析和T检验。
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之前对其进行筛选,但当我有空白时,它不会读取数据文件,我希望能够使用整个数据集,而不必为每个问题创建子集(如果必须的话,我会这样做……如果有更好的代码或包可供使用,这只是很耗时(
如有任何协助,我们将不胜感激!
您可以将"99"替换为"NA",并计算colMeans省略NAs:
df <- replicate(20, sample(c(1,2,3,99), 4))
colMeans(df) # nono
dfc <- df
dfc[dfc == 99] <- NA
colMeans(dfc, na.rm = TRUE)
您还可以在读取数据库时指出哪些值是NA。对于您的特殊情况:
mydata <- read.table('dat_base', na.strings = "99")