我正在使用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做这个条件。
如果有什么不清楚,请告诉我。谢谢!
答案 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)