【发布时间】:2016-11-30 07:42:33
【问题描述】:
I have read 在 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
我想创建一个新的数据框,其中每个条目都是一个人的“访问”,整理来自一个人的任何时间接近的条目。
# 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
它们可能是第一个数据框中单个人的 50 个条目,这些条目可能会被整理成新数据框中的 3 个“访问”。我不知道有多少“访问”。那么我应该如何创建这个数据框呢?
我知道 rbind,但在这种情况下,我会一一绑定每一行。这是个好主意吗?
另一种选择是遍历第一个数据框两次,一次是计算第二个数据框的大小,然后再次填充它,但这似乎效率更低。
【问题讨论】:
-
你只是这样做,然后附加到它。动态语言就是这样做的。这在大型列表中更重要,因为需要复制的大型列表正在扩展。更多的小向量和值 R 已经在你背后过度分配了。
-
这听起来有点像您只想
melt和filter...虽然没有具体的数据示例,但很难知道。 -
我建议你第 2 章,“Growing Objects”,这正是你所要求的 :) burns-stat.com/pages/Tutor/R_inferno.pdf 他建议的解决方案是 @Roland 提出的解决方案,但他也用系统分析了其他方法用于执行某些任务的时间(按块增长 vs. rbind vs. 下标)。你cn