我是R的新手和一般的编码,我需要一些帮助连接R中的两个进程 . 我有一个数据帧:
X <- c(385, 386, 387, 388, 390, 391, 392, 393, 394, 395, 396, 398, 399, 400)
east<- seq(1,14,1)
north<- seq(1,14,1)
df2 <-data.frame(X,east,north)
我想要做的是逐行查看X中的值并将它们相互比较以使用二进制结果填充新列 . 例如,如果X [1,]和X [2,]是顺序的,则新列值为1,如果X [1,]和X [2,]不是连续的0.这段代码:
for(i in 1:nrow(df2)){
ifelse((df2$X[i+1]-df2$X[i] <= 1), print(1), print(0))
}
提供我想要的信息,但我很难将其纳入专栏 .
[1] 1
[1] 1
[1] 1
[1] 0
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 0
[1] 1
[1] 1
我也试过这个:
df2$response <- NA
for(i in 1:nrow(df2)){
if(df2$X[i+1]-df2$X[i]==1){df2$response[i]<-1} else
if(df2$X[i+1]-df2$X[i]>1){df2$response[i]<-0}
}
但收到此错误:
Error in if (df2$X[i + 1] - df2$X[i] == 1) { :
missing value where TRUE/FALSE needed
有什么建议?提示?谢谢!
4 回答
人们正在用神秘的解决方案捆绑在一起 . 只是:
要么:
需要NA来解释在最后一行没有什么可以减去的事实 . 使用NA_integer_作为占位符而不是NA会导致逻辑值强制转换为整数(默认情况下,NA是逻辑类型) .
使用dplyr的另一个选项:
但是
ifelse()
不能很好地扩展/可能很慢,所以我们可以这样做:其中
as_integer()
必须准确指定您提出的输出,因为它分别将TRUE
和FALSE
转换为1
和0
.你快到了 .
把它包起来,
data.table
解决方案(仅用于说明)