for循环中的if / else语句为R - 想要if语句包含多个可能的值

时间:2012-02-29 19:19:43

标签: r if-statement for-loop

我正在使用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”语句中,如果n等于任何这些值,我不知道怎么用它来告诉R做这个条件。

如果有什么不清楚,请告诉我。谢谢!

3 个答案:

答案 0 :(得分: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所说,确保在摆脱它之前丢弃这些数据是明智的。识别早期死亡人群的分类变量可能有效。可能有更好的方法来处理它。

干杯, 戴维

答案 1 :(得分:0)

如果您正在尝试创建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行中缺少观察值,则两者都不起作用。

答案 2 :(得分:0)

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

data <- na.omit(culture_data)