1:nrow(i)中出错:在秒for循环中使用if…else时长度为0的参数
作为一名新手,我想在R中更好地处理循环和if…else状态。我正在尝试使用for循环和if…else代替ifelse和lappy来替换NAs。但是,我无法在if…中正确索引数据。。。还有一点 例如:1:nrow(i)中出错:在秒for循环中使用if…else时长度为0的参数,r,R,作为一名新手,我想在R中更好地处理循环和if…else状态。我正在尝试使用for循环和if…else代替ifelse和lappy来替换NAs。但是,我无法在if…中正确索引数据。。。还有一点 例如: data<-data.frame(a<-c("a","b","c","d"), b<-c("1","2",NA,"5"), c<-c("10",NA,"30",40)) for (i in data){
data<-data.frame(a<-c("a","b","c","d"),
b<-c("1","2",NA,"5"),
c<-c("10",NA,"30",40))
for (i in data){
for (x in 1:nrow(i)){
if (x==NA) {
x<-mean(i,na.rm=T)
}else
x<-x
}
在长度为0的1:nrowi:参数中出现错误。有什么建议吗?在检查是否存在NAs时,必须使用is.na功能 作为其工作原理的说明,您可以在R控制台中运行以下行,并检查输出:
1 == 1
1 == 2
1 == NA
NA == NA
is.na(NA)
这就是说,如果您想用列方式替换数据帧中的NAs值,您可以检查。首先解决您的错误:在数据帧中循环时,i是1D向量,即数据帧的一列,因此nrow没有任何意义。要查看这一点,请尝试在dataprintnrowi中使用fori 使用以下语法时,您在数据帧外声明单个向量:
data<-data.frame(a<-c("a","b","c","d"),
b<-c("1","2",NA,"5"),
c<-c("10",NA,"30",40))
您实际需要的是以下内容:
data <- data.frame(a = c("a","b","c","d"),
b = c("1","2",NA,"5"),
c = c("10",NA,"30",40))
如果列a也是一个数字,您可以通过以下方式实现您的目标:
for(i in 1:ncol(data)){
data[is.na(data[,i]), i] <- mean(data[,i], na.rm = TRUE)
}
来自。非常感谢,另外感谢您纠正我的示例!
a b c
1 a 1 10
2 b 2 <NA>
3 c <NA> 30
4 d 5 40
data <- data.frame(a = c("a", "b", "c", "d"),
b = c(1, 2, NA, 5),
c = c(10, NA, 30 ,40))
for(i in 1:ncol(data)){
data[is.na(data[,i]), i] <- mean(data[,i], na.rm = TRUE)
}