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)
我有一个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)