1

我对 R 很陌生,而且我来自 C++ 背景。我有一个包含多行和多列的数据框。我的问题是如何以不同的方式做到这一点,因为它需要永远运行。我有超过 6 万行和大约 15 列。有一个更好的方法吗?非常感谢您的帮助!

counter <-0

 for(j in 7:length(SeaStateData[3,]))
 {
  for( i in 1:length(SeaStateData[,3]))
      {


        if(!is.na(SeaStateData[i,j]) & !is.na(SeaStateData[i+1,j]))
        if(SeaStateData[i,j] == SeaStateData[i+1,j])
         {
          counter <- counter + 1
         }

       }
 }
4

1 回答 1

5

我会试试这个:

nr <- nrow(SeaStateData)
nc <- ncol(SeaStateData)
counter <- sum(SeaStateData[1:(nr - 1), 7:nc] ==
               SeaStateData[2:nr, 7:nc],
               na.rm = TRUE)

子集代表两个子矩阵,相对偏移为一行。运算符将==产生一个逻辑向量(在这种情况下是一个矩阵,它只是一个添加了维度信息的向量),其中包含TRUE两个项目是否匹配、FALSE它们是否不同以及NA其中一个是否为NAsumover a 逻辑向量计算所有值TRUE。该na.rm属性告诉它删除NA值;否则sum也会如此NAsum(…, na.rm = TRUE)大致相同sum(na.omit(…))

于 2012-07-09T11:37:59.497 回答