Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
1:nrow(i)中出错:在秒for循环中使用if…else时长度为0的参数_R - Fatal编程技术网

1:nrow(i)中出错:在秒for循环中使用if…else时长度为0的参数

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){

作为一名新手,我想在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){
  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)
}