【问题标题】:R - collapsing a data.frame by unique ID & generating multiple dummy variablesR - 通过唯一 ID 折叠 data.frame 并生成多个虚拟变量
【发布时间】: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 行,但使用新的虚拟变量。假设ACTIONENTIRE 原始data.frame 中有5 个感兴趣的值REFILL, DELIVER, PARK, PICKUP, PATROL。此外,ACTION_ID 变量仅与整体 ID 相关,并且对于每个给定的 ID 变量,最多有 5 个唯一的 ACTION_ID 值。

我想要的是 ACTIONACTION_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_nPATROL_n 提供更多虚拟变量,其中n=1:5

我尝试通过多个循环来实现这一点,通过唯一 ID 对大 data.frame 进行子集化,然后尝试生成新变量并将它们附加到新数据框中。但这永远不会始终如一地工作。如果有人对如何完成这项工作有任何想法,我将非常感激!

一切顺利 尼克

【问题讨论】:

  • 我可以用 dplyr 做到这一点。假设它被称为“df”,你能用你的数据框做到这一点吗?输入(头部(df,10))。这会给你一个很大的输出,复制并粘贴它,这样我就可以测试虚拟数据了。
  • 感谢您的回复 - 恐怕我无法在此处发布输出,因为我必须编辑数据中的所有识别变量。但是我可以告诉你 dput(head(df,10))==df 是 TRUE

标签: r dataframe


【解决方案1】:

我能够完成这项工作。您将需要手动编写附加代码,但这将为您解决。我假设您的数据框名为“df”

library(dplyr)    
new <- df %>% group_by(ID,NAME) %>% mutate(REFILL_01 =
 ifelse(ACTION=="Refill" & substr(ACTION_ID,4,4) == 1,"TRUE","FALSE"),
 REFILL_02 = ifelse(ACTION=="Refill" & substr(ACTION_ID,4,4) == 2, "TRUE","FALSE"))

这会获取数据,按 ID 分组,然后按 NAME。然后我们开始制作虚拟变量。我将引导您完成第一个。如果 ACTION=Refill 并且 ACTION_ID 的结束编号为 1,则 REFILL_01 等于 TRUE。否则,它得到 false。让我知道这是否有意义,或者您是否需要更多说明。您现在只需要添加您想要的其他虚拟变量。我为你做了 REFILL_01 和 REFILL_02。

【讨论】:

  • 感谢您。我会试一试并报告!和 - “变蓝”是什么意思?原谅我的无知!
  • @nikUoM 谢谢,如果您需要帮助,请告诉我。剩下要做的就是在倒数第二个括号之后开始添加更多变量。忽略蓝色,我以为你的名字是指密歇根大学
  • 啊,现在说得通了。不,它指的是曼彻斯特大学(英国)。
  • 我的代码目前的问题是它仍然无法总结。 summarise 命令可以为每个人提供一个观察结果,但我在应用它时遇到了麻烦。希望有人看到这一点并可以完成我的代码。
猜你喜欢
  • 1970-01-01
  • 2021-04-21
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多