【发布时间】:2019-05-05 21:06:16
【问题描述】:
您好,我需要 R 编程方面的帮助。我有四列的 data.frame B
x<- c(1,2,1,2,1,2,1,2,1,2,1,2,.......etc.)
y<-c(5,5,8,8,12,12,19,19,30,30,50,50,...etc.)
z<- c(2018-11-08,2018-11-08,2018-11-09,2018-11-09,2018-11-11,2018-11-11,2018-11-20,2018-11-20,2018-11-29,2018-11-29,2018-11-30,2018-11-30,.......etc.)
m<-c(0,1,1,0,1,1,0,1,0,1,0,1,...etc.)
200 万行,我需要创建下一列。下一列应如下所示
t<-c(0,1,0,0,0,0,0,1,0,1,0,1,....)
循环中的代码看起来像
B$t[1]=ifelse(B$y[i]==B$y[i+1] & B$z[i]==B$z[i+1] & B$x[i]==2 & B$m[1]==1,1,0)
for (i in 2:length(B$z))
{
B$t[i]<-ifelse(B$y[i]==B$y[i-1] & B$z[i]==B$z[i-1] & B$x[i]==2 & B$m[i]==1 & B$m[i]!=B$m[i-1],1,0)
}
我不想使用循环循环。
我在 R 中使用基本包。
当我有 data.frame E 时,我有一个新问题
x<- c(1,2,3,1,2,3,1,2,3,1,2,3,.......etc.)
y<-c(5,5,5,8,8,8,12,12,12,,19,19,19,30,30,30,50,50,50,...etc.)
z<- c(2018-11-08,2018-11-08,2018-11-08,2018-11-09,2018-11-09,2018-11-09,2018-11-11,2018-11-11,2018-11-11,2018-11-20,2018-11-20,2018-11-20,2018-11-29,2018-11-29,2018-11-29,2018-11-30,2018-11-30,2018-11-30,.......etc.)
m<-c(0,1,1,0,0,1,0,1,0,1,0,1,0,0,1...etc.)
200 万行,我需要创建下一列。下一列应如下所示
t<-c(0,1,0,0,1,....)
循环中的代码看起来像
E$t[1]=ifelse(E$y[i]==E$y[i+1] & E$z[i]==E$z[i+1] & E$x[1]==2 & E$m[1]==1,1,0)
E$t[2]=ifelse(E$y[i]==E$y[i+1] & E$z[i]==E$z[i+1] & E$x[2]==3 & E$m[2]==1,1,0)
for (i in 3:length(E$y))
{
E$t[i]<-ifelse(E$y[i]==E$y[i-2] & E$z[i]==E$z[i-2] & E$x[i]==3 & E$m[i]==1 &
E$m[i-1]==0 & E$m[i-2]==0,1,0)
}
我不想使用循环循环。
我在 R 中使用基本包。
【问题讨论】:
-
是不是和你上一个问题类似
-
检查
lag函数来自dplyr。 -
否,因为现在之前的字母在条件中。
-
您的示例数据不可重现。请将
dput(head(B, 20))的输出复制到您的问题中!请阅读stackoverflow.com/questions/5963269/… -
在
B$t[1]=ifelse(B$y[i]==B$y[i+1] ...)中,对象i未定义。
标签: r if-statement conditional-statements