ore*_*ano 2 r vector append dataframe
我读过附加到 R 中的向量是不好的做法。在这种情况下,当我想创建一个向量但我不知道它的长度时该怎么办?
我正在查看一个数据框,其中包含有关人们何时靠近特定位置的条目。每个条目都包含有关此人及其附近时间的信息,但一个人可以有多个条目。
# loc id time
# 1: z A 00:00
# 2: z A 00:01
# 3: z B 00:02
# 4: z A 00:02
# 5: z C 00:05
# 6: z C 00:07
# 7: z A 00:08
# 8: z A 00:09
# 9: z C 00:09
#10: z C 00:10
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据框,其中每个条目都是一个人的“访问”,整理来自一个人的时间接近的任何条目。
# loc id starttime endtime
# 1: z A 00:00 00:02
# 2: z C 00:05 00:07
# 3: z A 00:08 00:09
# 4: z C 00:09 00:10
Run Code Online (Sandbox Code Playgroud)
对于第一个数据框中的一个人,它们可能是 50 个条目,在新数据框中可以整理成 3 个“访问”。我不知道有多少“访问”。那么我应该如何创建这个数据框呢?
我知道 rbind,但在这种情况下,我将一一绑定每一行。这是一个好主意吗?
另一种选择是遍历第一个数据帧两次,一次是为了确定第二个数据帧的大小,然后再填充它,但这似乎效率更低。
我不相信你需要这个(可能有一个更好的解决方案来解决你描述不佳的实际问题),但我会在第一段回答这个问题。如果您不知道结果向量需要多大,您可以将其初始化为合理的大小,并根据需要分块增长。这限制了向量需要增长的时间。
set.seed(42)
vec <- numeric(100) #initialize a chunk
i <- 0
repeat {
test <- rnorm(1)
if (test > 3) break
i <- i + 1
#grow in chunks:
if (length(vec) < i) vec <- c(vec, numeric(100))
vec[i] <- test
}
#shorten to final length
vec <- vec[seq_len(i)]
Run Code Online (Sandbox Code Playgroud)
你实际上在现实生活中做了类似的事情。如果你买了一个新书架,你就买得足够大,这样你就有足够的空间来买未来的书了。当它已满时,您购买下一个(或更大的)。