我有两个向量,我想在一个数据帧中组合。其中一个向量values
需要分为两列。第二个向量nc
通知每个观察的值的数量。如果nc
为1,则values
中只有一个值(进入val1
),999
将在第二列中写入val2
)。
什么是r-ish方法来划分向量value
并填充df
的两列?我怀疑我错过了一些非常明显的东西,但此刻无法继续......非常感谢!
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))
答案 0 :(得分:0)
我认为这就是你要找的东西。我不确定这是最快的方式,但它应该可以解决这个问题。
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]
}
}
答案 1 :(得分:0)
这是一种基于this answer的方法:
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)