以下是一个简单的循环,用于在检查特定条件(如果2个连续的行具有相同的值)之后在数据帧中插入新列。
代码可以正常工作,但是我想提高自己的编码技能,所以我要求替代解决方案(更快,更优雅)。
我检查了有关该主题的先前主题并学到了很多东西,但是我对自己的具体情况感到好奇。
感谢您的任何投入。

vector<-1
vector_tot<-NULL

  for(i in 1:length(dat$Label1))
  {
     vector_tot<-c(vector_tot,vector)
     if(dat$Label1[i]==dat$Label1[i+1]){
    vector<-0
    }
    else {
      vector<-1
      }
      }


dat$vector<- vector_tot

最佳答案

对于R中的许多内容,由于函数是 vector 化的,因此不需要for循环。因此,我们可以实现您想要的:

# sample data
dat <- data.frame(Label1=c("A","B","B","C","C","C","D"),stringsAsFactors = F)

# first create a vector that contains the previous value
dat$next_element <- c(dat$Label1[2:nrow(dat)],"")

# then check if they match
dat$vector <- as.numeric(dat$Label1==dat$next_element)

输出:
  Label1 next_element vector
1      A            B      0
2      B            B      1
3      B            C      0
4      C            C      1
5      C            C      1
6      C            D      0
7      D                   0

它也可以一行完成,但是我认为上面的例子更好地说明了它的工作方式:
dat$vector <- dat$Label1==c(dat$Label1[2:nrow(dat)],"")

或与上一个元素进行比较:
dat$vector <- dat$Label1==c("",dat$Label1[1:nrow(dat)-1])

09-26 22:06