的每一个细胞我编辑了这个问题(希望的要求)[R施加ifelse语句将data.frame
我需要检查一个data.frame的每一个细胞,如果它的值在一定范围内。我很新的申请,需要努力了解它。
我有2个data.frames:
blood_df
:158列,stat_df
:统计信息的blood_df
附每栏是用于解释一个小例子:
到目前为止我得到了这个,但它计算每个细胞的结果相同。
c0 <- c(0,0,0,0)
c1 <- c(1,2,3,4)
c2 <- c(5,6,7,8)
c3 <- c(9,10,11,12)
c4 <- c(13,14,15,16)
blood_df <- data.frame(c0,c1,c2,c3,c4)
stat_df <- data.frame(matrix(ncol = 5, nrow = 6))
colnames(stat_df) <- colnames(blood_df)
rownames(stat_df) <- c("Mean","3*sd","sum", "Mean2","-3*sd","sum2")
stat_df[1,2:5] <-apply(blood_df[,2:5], 2, mean, na.rm = TRUE)
stat_df[2,2:5] <-apply(blood_df[1:4,2:5], 2, function(x) 3*sd(x,na.rm=TRUE))
stat_df[3,] <-colSums(stat_df[1:2,])
stat_df[4,2:5] <-apply(blood_df[,2:5], 2, mean, na.rm = TRUE)
stat_df[5,2:5] <-apply(blood_df[1:4,2:5], 2, function(x) -3*sd(x,na.rm=TRUE))
stat_df[6,] <-colSums(stat_df[4:5,])
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 5 9 13
## 2 0 2 6 10 14
## 3 0 3 7 11 15
## 4 0 4 8 12 16
stat_df:
## c0 c1 c2 c3 c4
## Mean NA 2.500000 6.500000 10.500000 14.500000
## 3*sd NA 3.872983 3.872983 3.872983 3.872983
## sum NA 6.372983 10.372983 14.372983 18.372983
## Mean2 NA 2.500000 6.500000 10.500000 14.500000
## -3*sd NA -3.872983 -3.872983 -3.872983 -3.872983
## sum2 NA -1.372983 2.627017 6.627017 10.627017
不工作,因为我需要它的部分:
blood_df[1:4,2:5] <- apply(blood_df[,2:5],2, function(x)
(ifelse((x > (stat_df[3,2:5]))||
(x < (stat_df[6,2:5])), NA, x)))
到目前为止,它给了我:
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 1 1 1
## 2 0 5 5 5 5
## 3 0 NA NA NA NA
## 4 0 NA NA NA NA
我希望得到的是:(检查如果每个值在一定范围之间)
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 5 9 13
## 2 0 2 6 10 14
## 3 0 3 7 11 15
## 4 0 4 8 12 16
如果它不在该范围内,该值应该更改为NA。
谢谢!
能否请您为我们提供了一个可重复的例子?这将使回答问题更容易。 :) –
并请添加所需输出的示例。 – ekstroem
[关于如何给出一个可重现的例子的信息](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap