for循环中的两个if语句

for循环中的两个if语句,r,R,我对R和编程都是一个完全的新手。 请原谅我的愚蠢,但我认为这将是一个很容易回答的问题。 我有一个如下表,并试图提取一组值添加到列表中。我的尝试如下: cfemale0=(0) for (i in Gender) { if (Gender[i]=="F") { if (Treatment[i]=="Control") { cfemale0=c(cfemale0,Distance[i]) } } } if-Gende

我对R和编程都是一个完全的新手。 请原谅我的愚蠢,但我认为这将是一个很容易回答的问题。 我有一个如下表,并试图提取一组值添加到列表中。我的尝试如下:

  cfemale0=(0)
  for (i in Gender) {
     if (Gender[i]=="F") {
       if (Treatment[i]=="Control") {
           cfemale0=c(cfemale0,Distance[i])
       }
     }
  }
if-Gender[i]==F{:缺少需要TRUE/FALSE的值时出错

下面是很长表格的摘录:

14  1   F   Control 1   2
14  1   F   Control 2   1
14  1   F   Control 3   1
14  1   F   Control 4   1
14  1   F   Control 5   1
14  1   F   Control 6   2
14  1   F   Control 7   2
14  1   F   Control 8   1
14  1   F   Control 9   1
14  1   F   Control 10  1
14  1   F   Control 11  1
14  1   F   Control 12  1
14  1   F   Control 13  1
14  1   F   Control 14  13
14  1   F   Control 15  1
14  1   F   Control 16  0
14  1   F   MBR 1   1
14  1   F   MBR 2   2
14  1   F   MBR 3   18
14  1   F   MBR 4   5
14  1   F   MBR 5   16
14  1   F   MBR 6   5
14  1   F   MBR 7   0
14  1   F   MBR 8   1
14  1   F   MBR 9   3
14  1   F   MBR 10  1
14  1   F   MBR 11  17
14  1   F   MBR 12  16
14  1   F   MBR 13  17
14  1   F   MBR 14  16
14  1   F   MBR 15  17
14  1   F   MBR 16  2
14  1   F   MBL 1   2
14  1   F   MBL 2   2
14  1   F   MBL 3   1
14  1   F   MBL 4   2
14  1   F   MBL 5   1
14  1   F   MBL 6   3
14  1   F   MBL 7   4
14  1   F   MBL 8   3
14  1   F   MBL 9   3
14  1   F   MBL 10  3
14  1   F   MBL 11  2
14  1   F   MBL 12  2
14  1   F   MBL 13  2
14  1   F   MBL 14  1
14  1   F   MBL 15  1
14  1   F   MBL 16  1
12  2   M   Control 1   7
12  2   M   Control 2   7
12  2   M   Control 3   15
12  2   M   Control 4   19
12  2   M   Control 5   16
12  2   M   Control 6   19
12  2   M   Control 7   15
12  2   M   Control 8   18
12  2   M   Control 9   13
12  2   M   Control 10  19
12  2   M   Control 11  12
12  2   M   Control 12  4
12  2   M   Control 13  15
12  2   M   Control 14  14
12  2   M   Control 15  19
12  2   M   Control 16  6
12  2   M   MBR 1   7
12  2   M   MBR 2   15
12  2   M   MBR 3   15
12  2   M   MBR 4   3
12  2   M   MBR 5   8
12  2   M   MBR 6   10
12  2   M   MBR 7   17
12  2   M   MBR 8   3
当你在性别中为i做时,我会取性别元素的值。它不是一个有效的索引,除非是偶然的,你通常会得到一个越界错误的索引。你不在这里可能是因为性别是一个列表

在比较对NA值执行和if语句(即执行ifNA)时,如果需要TRUE/FALSE,则会得到错误缺少值

因此,您的解决方案是为您的性别提供正确的索引:


如果性别是一个矩阵,你会将长度更改为nrow或ncol。

我只能猜测你的数据结构,但如果它在数据框中,你所要做的就是:

vector <- df$Distance[df$Gender == "F" & df$Treatment == "Control",]

尝试一下seq_alongGender中的i…可能有一个简单的方法来做这件事,但你没有提供足够的信息,没有可复制的例子。现在你在第二个循环中。当你在Gender中做i时,我得到的是Gender中的值,因此当你做Gender[i]==F时,你基本上是在做类似F[F]的事情==F或M[F]==F,这是无效的syntex,处理方法相同。请参阅@BenBolker关于如何解决此问题的建议。无论哪种方式,您都不应该在此处使用循环,因此@Rolands注释将派上用场。Tim Foster和相同的so帐户?编辑是由davide建议的
vector <- df$Distance[df$Gender == "F" & df$Treatment == "Control",]