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<-子集(数据,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")

最新更新