R中的折叠虚拟列

Collapsing dummy columns in R

我有一个tibble,其中每一行对应一个人。每个人有多行,但每一行包含每个人的完全相同的数据,除了最后几列(下面,“赢”,“输”)包含 1/0 虚拟变量。假人的值因行而异。

示例数据框:

df <- data.frame(name = c("Anne", "Anne", "Anne", "Joe", "Joe", "Joe", "Kyle", "Kyle", "Kyle", "Tom", "Tom", "Tom"), age = c("13", "13", "13", "15", "15", "15", "12", "12", "12", "14", "14", "14"), won = c(1,0,0,0,0,1,0,1,0,0,0,0), lost = c(0,1,0,0,1,0,1,0,0,0,1,0))

我想折叠 行以便每个人只有一行。在我折叠的数据框中,如果某人在原始数据集中的该列中有任何“1”,我希望该人的“赢”和“输”(虚拟列)的值为“1”。否则,我希望值为“0”。

折叠数据框:

df_collapsed <- data.frame(name = c("Anne", "Joe", "Kyle", "Tom"), age = c("13","15","12","14"), won = c(1,1,1,0), lost = c(1,0,1,1))

如果您有任何想法,请告诉我!我无法手动执行此操作(如示例中所示),因为我的实际数据集要大得多。我已经思考这个问题一段时间了,但无法弄清楚如何相应地折叠数据框。

分组后我们可以用max

library(dplyr)
df %>%
   group_by(name, age) %>% 
   summarise(across(everything(), max), .groups = 'drop')

或在base R

aggregate(. ~ name + age, df, max)