r语言 - 用分组向量划分向量



我有两个向量,我想将它们组合在一个数据帧中。其中一个向量values需要分为两列。第二个向量nc告知每个观测值的值数。如果nc为 1,则在 values 中只给出一个值(进入 val1),999写在第二列 (val2 )。

划分向量value并填充两列df的 r 方法是什么?我怀疑我错过了一些非常明显的东西,但目前无法继续......非常感谢!

set.seed(123)
nc <- sample(1:2, 10, replace = TRUE)
value <- sample(1:6, sum(nc), replace = TRUE)

# result by hand
df <- data.frame(nc = nc, 
               val1 = c(6, 3, 4, 1, 2, 2, 6, 5, 6, 5), 
               val2 = c(999, 5, 999, 6, 1, 999, 6, 4, 4, 999))  

以下是基于此答案的方法:

set.seed(123)
nc <- sample(1:2, 10, replace = TRUE)
value <- sample(1:6, sum(nc), replace = TRUE)
splitUsing <- function(x, pos) {
    unname(split(x, cumsum(seq_along(x) %in% cumsum(replace(pos, 1, pos[1] + 1)))))
}
combineValues <- function(vals, nums) {
    mydf <- data.frame(cbind(nums, do.call(rbind, splitUsing(vals, nums))))
    mydf$V3[mydf$nums == 1] <- 999
    return(mydf)
}
df <- combineValues(value, nc)

我认为这就是你要找的。我不确定这是最快的方法,但它应该可以解决问题。

count <- 0
for (i in 1:length(nc)) {
    count <- count + nc[i]
    if(nc[i]==1) {
        df$val1[i] <- value[count]
        df$val2[i] <- 999
    } else {
        df$val1[i] <- value[count-1]
        df$val2[i] <- value[count]
    }
}

最新更新