作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试计算向量中相似连续数字的“ block ”。但是当我期望它输入“1”或“0”时,我的代码会吐回“NA”
x <- c(1,1,0,1,1,1,0,0,1)
y <- c(0)
turing <- function(x){
y <- c(0)
for (i in length(x)){
ifelse(isTRUE(x[i] == x[i+1]), y[i]<-0, y[i]<-1)
}
y
}
turing(x)
这吐出来了[1] 0 NA NA NA NA NA NA 1
编辑:以下似乎工作正常:
turing <- function(x){
y <- numeric(length(x))
for (i in seq_along(x)){
ifelse(isTRUE(x[i] == x[i+1]), y[i] <-0 , y[i] <- 1)
}
y
}
当它吐出来的时候0 1 1 0 0 1 0 1 1
谢谢!
最佳答案
如果我们需要一个计数序列,可以使用 data.table
rleid
library(data.table)
rleid(x)
或使用 base R
rle
with(rle(x), rep(seq_along(values), lengths))
使用OP的代码,可以将'y'预先分配为length
等于x长度的向量,然后循环'x'的序列(而不是'length'作为长度只是一个数字),然后执行 if/else
(ifelse
是矢量化选项,因为我们在循环中执行此操作 if/else
只需要)
turing <- function(x){
y <- numeric(length(x))
for (i in seq_along(x)){
if(i < length(x)) {
if(x[i] == x[i+1]) {
y[i]<-0
} else y[i]<-1
}}
y[length(y)] <- 1
y
}
turing(x)
#[1] 0 1 1 0 0 1 0 1 1
关于R ifelse 抽出 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60908096/
我正在尝试计算向量中相似连续数字的“ block ”。但是当我期望它输入“1”或“0”时,我的代码会吐回“NA” x <- c(1,1,0,1,1,1,0,0,1) y <- c(0) turing
我是一名优秀的程序员,十分优秀!