【问题标题】:For Loop that References the Previous Row in R引用 R 中上一行的 For 循环
【发布时间】:2020-10-16 20:56:44
【问题描述】:

我对 R 比较陌生,我正在尝试创建一个带有条件的 for 循环,该条件引用前一行的等价性。为了学习为自己的数据编写这段代码,我创建了一个更简单、有代表性的数据框:

df<- c(1,1,2,0,0,0,0,1,1,2)

我的目标是为 df 中与前一个值不同的每个值打印一个 1。对于这个 df,这应该如下所示: [1] 0,0,1,1,0,0,0,1,0,1.

这是我迄今为止尝试过的:

for(i in df){
  if(x[i] != x[i-1]){
    print(1)
  }else{
    print(0)
  }
}

从上面的代码中,我一直得到错误“参数长度为零”。很可能我犯了一个简单的错误,但我感谢任何建议!

【问题讨论】:

  • 试试for(i in 2:length(df)) {...}
  • R 是一种矢量化语言。试试这个而不是使用循环:ifelse(df == dplyr::lag(df, default=-1), 1, 0)

标签: r for-loop


【解决方案1】:

也许试试这个。您正在使用不存在的x。而是在循环内使用df。此外,由于您需要从一个元素到下一个元素进行比较,最好从第二个位置开始循环,因为第一个元素没有任何要比较的先前值。代码如下:

#Data
df<- c(1,1,2,0,0,0,0,1,1,2)
#Loop
for(i in 2:length(df)){
  if(df[i] != df[i-1]){
    print(1)
  }else{
    print(0)
  }
}

输出:

[1] 0
[1] 1
[1] 1
[1] 0
[1] 0
[1] 0
[1] 1
[1] 0
[1] 1

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多