[英]if/else statement in for loop for R - want if statement to include multiple possible values
我正在使用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这样做。
让我知道是否有不清楚的地方。 谢谢!
假设您的数据如下所示
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)))
将工作。
尽管,正如亚伦所说,请确保在删除数据之前将其丢弃是明智的。 识别早期死亡人群的分类变量可能会起作用。 不过,也许有更好的方法来处理它。
欢呼声,戴维
如果您尝试创建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行中缺少观察值,则两者都不起作用。
可能只是na.omit? 它将从数据集中删除不完整的案例。
data <- na.omit(culture_data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.