for循环,用于出现1次以上的唯一值

时间:2019-04-16 08:56:33

标签: r for-loop

我有一份调查表(是的,到目前为止我所有的问题都一样... A for loop for multiple likert graphs returns NOTHING

现在,我正在评估每个地理区域(11个区域)的答案,我想通过for循环进行此操作。

用于制作我的图表的点赞包不会为<= 1个非NA答案绘制任何图表。所以这些都不能正常工作:

我的(假设)数据看起来像这样(-9表示不适用):

 M1 M2 M3 M4 M5 M6 M7 M8 M9 group
1   1  5  5  1  2  4  4 -9  5     1
2   2  4  5  1  2  4  4  1  5     1
3   3  3  5  1  2  4  3  1  3     1
4   1  5  5  1  2  4  4 -9  5     1
5   2  4  5  1  2  4  4  1  5     2
6   1  5  5  1  2  4  4 -9  5     2
7   2  4  5  1  2  4  4  1  5     2
8   3  3  5  1  2  4  3  1  3     3
9   4  5  5  1  2  4 -9  1  3     3
10  5  5 -9  1  3  4  4  2 -9     3
11  3  3  5  1  2  4  3  1  3     3
12  4  5  5  1  2  4 -9  1  3     4
13  5  5 -9  1  3  4  4  2 -9     3
14  5  5 -9  1  3  4  4  2 -9     3
15  3  3  5  1  2  4  3  1  3     4
16  1  5  5  1  2  4  4 -9  5     4
17  2  4  5  1  2  4  4  1  5     4
18  1  5  5  1  2  4  4 -9  5     4
19  2  4  5  1  2  4  4  1  5     4
20  3  3  5  1  2  4  3  1  3     4
21  -9 -9 -9 -9 -9 -9 -9 -9 -9    5
22  1  1  1  1  1  1  1  1  1     6

这两个for循环版本不起作用:

for (i in 1:5)
for (i in unique(mydata$group))

因为:FUN(X [[i]],...)中的错误:找不到对象'pos'

我认为这是因为第5组仅包含N / As,而第6组仅包含一个样本。

因此,我需要一个通过我的for循环执行的函数,该函数仅为具有超过2行(非N / A)的i创建值。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在循环内询问是否已给出条件,即存在多于2个非N / A的行。

mydata <- read.table(text = "
 M1 M2 M3 M4 M5 M6 M7 M8 M9 group
1   1  5  5  1  2  4  4 -9  5     1
2   2  4  5  1  2  4  4  1  5     1
3   3  3  5  1  2  4  3  1  3     1
4   1  5  5  1  2  4  4 -9  5     1
5   2  4  5  1  2  4  4  1  5     2
6   1  5  5  1  2  4  4 -9  5     2
7   2  4  5  1  2  4  4  1  5     2
8   3  3  5  1  2  4  3  1  3     3
9   4  5  5  1  2  4 -9  1  3     3
10  5  5 -9  1  3  4  4  2 -9     3
11  3  3  5  1  2  4  3  1  3     3
12  4  5  5  1  2  4 -9  1  3     4
13  5  5 -9  1  3  4  4  2 -9     3
14  5  5 -9  1  3  4  4  2 -9     3
15  3  3  5  1  2  4  3  1  3     4
16  1  5  5  1  2  4  4 -9  5     4
17  2  4  5  1  2  4  4  1  5     4
18  1  5  5  1  2  4  4 -9  5     4
19  2  4  5  1  2  4  4  1  5     4
20  3  3  5  1  2  4  3  1  3     4
21  -9 -9 -9 -9 -9 -9 -9 -9 -9    5
22  1  1  1  1  1  1  1  1  1     6
", header=T, na.strings="-9")

for (i in unique(mydata$group)) {
  x <- mydata[mydata$group==i,]
  if(sum(complete.cases(x)) > 2) { #more than 2 rows which are non-N/A?
    plot(x[1:9])
  }
}