我有两列ID
和Trial
。 ID列填充 NA 。 Trial
列从0开始并以一个arbritary数字结束(例如1232),然后下一个试验序列从0开始等。我的目标是为每个系列的试验创建一个唯一的ID。
我是R的新手并意识到有几种方法可以解决这个问题:
lapply
(或rapply
?)与抽象(?)函数调用或句柄一起使用nextElem
包中的iterator
以及第1或第2点seq()
:ex_data[subset]
到目前为止,我已经发现参加人数是:
N <- dim(filter(ex_data, Trial == 0))[1]
或更优雅:
N <- count(ex_data[Trial == 0])
特别是,这是我正在努力的条件部分,以及最像R的解决方案。
伪代码:
IDs are 1:N
while IDs < N+1
current + 1
while column Trial is > 0
ID is IDs[current]
next Trial
next Trial
如何决定何时在apply
系列等更紧凑的表达式上使用循环?具体来说,如何基于几乎循环的列生成新序列?
Example Data (for generation see below)
id t
[1,] NA 0
[2,] NA 1
[3,] NA 2
[4,] NA 3
[5,] NA 4
[6,] NA 5
[7,] NA 0
[8,] NA 1
[9,] NA 2
[10,] NA 3
[11,] NA 4
[12,] NA 5
[13,] NA 6
[14,] NA 7
[15,] NA 0
[16,] NA 1
[17,] NA 2
[18,] NA 3
[19,] NA 4
[20,] NA 5
[21,] NA 6
[22,] NA 7
[23,] NA 8
[24,] NA 9
[25,] NA 10
[26,] NA 11
[27,] NA 12
# Generate Example Data
t <- c(0:5, 0:7, 0:12)
id <- rep(NA, length(t))
dta <- cbind(id, t)
# Optional (using dtplyr)
# dta <- tbl_df(dta)
答案 0 :(得分:4)
我们可以使用data.table
方法
ex_data[, ID := cumsum(!Trial)]