【问题标题】:if/else statement in for loop for R - want if statement to include multiple possible valuesR 的 for 循环中的 if/else 语句 - 希望 if 语句包含多个可能的值
【发布时间】:2012-02-29 19:19:42
【问题描述】:

我正在使用 R,并且正在尝试编写一个 for 循环来分析我的数据。我遇到的问题是我的一些复制品被采样了 6 次,有些被采样了 4 次(我正在培养文化,有些在 4 个时间点后死亡,而另一些则在整个实验过程中存活并被采样了 6 次)。我只想在我的 for 循环中设置一个条件 if/else 循环来切断 NA 值(对于未采样该文化的点)。这是我所拥有的:

names <- colnames(culture_data)
for(i in 1:72){
    n <- as.factor(names[i])
    chl.sub <- subset(culture_data, select = n)
    if (n == c("X1", "X2", "X3", "X10", "X11", "X12", "X37", "X38", "X39", "X46", "X47", "X48"))
        chl.sub <- as.matrix(chl.sub[1:4,])
        data <- (data.frame(time_newAgNP, chl.sub))
        }
    else {
        data <- (data.frame(time, chl.sub))
        }

因此,我希望在第 4 行之后切割文化 1-3、10-12、37-39 和 46-48 的子集数据,并完全使用所有其他文化的子集数据。

我认为我的主要问题是在第一个“if”语句中,因为我不知道如何用它来告诉 R 在 n 等于其中任何一个值的情况下执行此条件。

如果有什么不清楚的地方请告诉我。谢谢!

【问题讨论】:

  • 你想要%in%。请尝试?'%in%' 了解详情。
  • 还要确保你对死去的人做一件明智的事情;也许那些死去的人与那些没有死去的人在某些方面有所不同;在这种情况下,就像您在这里所做的那样,忽略它们可能是非常错误的。
  • 为什么不只是culture_data[1:4,c("X1", "X2", "X3", "X10")]
  • culture_data[!is.na(culture_data)] ?
  • 非常感谢您的帮助!我添加了 %in% 并且它正在工作!谢谢!我还意识到,我试图避免的 NA 值实际上并不是问题。我正在尝试估计其中一个自启动模型的参数,在这种情况下,R 只是忽略了 NA 值。但这些信息非常有用 - 谢谢!

标签: r if-statement for-loop


【解决方案1】:

假设您的数据如下所示

       t1         t2          t3         t4         t5
1  1.00867689 -1.0286160 -0.13429176 -2.3891856  1.2285634
2 -0.06094606 -0.5265711 -0.52767898         NA         NA
3  1.60603566  0.8295580 -0.44729021 -0.1297540 -1.5007802
4  0.13809702  0.5940972  0.80628674         NA         NA
5  0.45239500  0.6797742 -0.03644485  0.7555041  0.4816549

然后

missing = subset(test,is.na(rowSums(test)))
nonmissing = subset(test,!is.na(rowSums(test)))

会起作用的。

尽管,正如 Aaron 所说,在删除这些数据之前,请确保丢弃这些数据是明智的。识别早逝人群的分类变量可能会起作用。不过可能有更好的方法来处理它。

干杯, 戴维

【讨论】:

    【解决方案2】:

    如果您尝试创建 2 个数据集,一个数据集仅包含没有缺失观察的列,另一个数据集仅包含包含缺失观察的列,这样的操作可能会起作用:

    a <- matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,NA,NA,19,20,NA,NA,21,22), nrow=6, byrow=T)
    a
    
    zz <- which( !(is.na( colSums(a))) )
    
    # columns without missing observations
    b<- a[,zz]
    b
    
    # columns with missing observations
    c<- a[1:4,-zz]
    c
    

    这是一个在列中选择行的循环

    for(i in 1:ncol(a)) {    if(is.na(sum(a[,i]) )) b = a[1:4,i] else b= a[1:6,i] ; print(b) }
    

    如果第 1 行到第 4 行中缺少观测值,这两种方法都可能无效。

    【讨论】:

      【解决方案3】:

      可能只是 na.omit?它将从您的数据集中删除不完整的案例。

      data <- na.omit(culture_data)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多