【发布时间】:2017-11-06 22:17:36
【问题描述】:
我正面临一个几天来一直试图解决的问题,但我无法解决这个问题。也许你们都知道一个好的解决方案。
我有一个数据框,大约有 3,000,000 行。 有一个关键的 ID 变量,大约有 200,000 行。我想将 data.frame 折叠成一个新的 data.frame,每个唯一 ID 变量值只有 1 行。
此外,只要 ID 是重复的,就有一堆变量也是重复的。这是一个例子:
ID NAME CAR
42 Bob Ford
42 Bob Ford
42 Bob Ford
但是,对于数据框的子集,也有一些变量会有所不同,这些变量表示特定的事件或采取的行动。这是一个例子:
ID NAME CAR ACTION ACTION_ID
42 Bob Ford REFILL 4201
42 Bob Ford DELIVER 4202
42 Bob Ford REFILL 4203
我想要的是将其展平为 1 行,但使用新的虚拟变量。假设ACTION 在ENTIRE 原始data.frame 中有5 个感兴趣的值REFILL, DELIVER, PARK, PICKUP, PATROL。此外,ACTION_ID 变量仅与整体 ID 相关,并且对于每个给定的 ID 变量,最多有 5 个唯一的 ACTION_ID 值。
我想要的是 ACTION 和 ACTION_ID 的每个可能组合的虚拟变量,看起来像这样
ID NAME CAR REFILL_01 REFILL_02 REFILL_03 REFILL_04 REFILL_05
42 Bob Ford TRUE FALSE TRUE NA NA
DELIVER_01 DELIVER_02 DELIVER_03 DELIVER_04 DELIVER_05
FALSE TRUE FALSE NA NA
为PARK_n, PICKUP_n 和PATROL_n 提供更多虚拟变量,其中n=1:5。
我尝试通过多个循环来实现这一点,通过唯一 ID 对大 data.frame 进行子集化,然后尝试生成新变量并将它们附加到新数据框中。但这永远不会始终如一地工作。如果有人对如何完成这项工作有任何想法,我将非常感激!
一切顺利 尼克
【问题讨论】:
-
我可以用 dplyr 做到这一点。假设它被称为“df”,你能用你的数据框做到这一点吗?输入(头部(df,10))。这会给你一个很大的输出,复制并粘贴它,这样我就可以测试虚拟数据了。
-
感谢您的回复 - 恐怕我无法在此处发布输出,因为我必须编辑数据中的所有识别变量。但是我可以告诉你 dput(head(df,10))==df 是 TRUE