为每个单独的 R 导入具有重复列名的文件

Import file with repeated column names for each individual R

我必须将一个非正统文件导入 R。我附上了一个带有虚假数据的小示例文件来演示该问题。我需要整理的原始数据显示在图像“原始”中,我要创建的整理数据显示在图像“整洁”中。

RAW

整洁

每个人都有 (1) 适用于同一组内所有个人的组级别信息,以及 (2) 仅适用于各自个人的个人级别信息。在附件中,组级数据包括FamilyLocation。然后,根据组中有多少人,有与每个人相关的重复列集。

例如,第 2 行代表居住在芝加哥的史密斯一家。史密斯家族有 3 名成员,包括约翰、莎莉和本。每个成员都有自己的一组具有相同信息类型的重复列名称:姓名年龄性别, 爱好。这些列中的每一组都具有相同的名称,并且每个家庭最多重复 3 个人(总共 9 列)。

我需要的是将这些数据导入 R 并将其转换为整洁的格式,最好使用 tidyverse 解决方案。

感谢您的帮助!

也许最好的策略还取决于您输入原始数据的方式(例如,来自 Excel)。

如果您碰巧有 Excel 数据,您可以使用 tidyverse 中的 read_excel 并可以包含 .name_repair = "minimal" 以防止更改列名。

在这种情况下,使用 repair_names 可以使重复的列名具有一致的结构,也许带有下划线(这会给你 NameName_1Name_2AgeAge_1Age_2 等)。

最后,您重复的 pivot_longer 列将提供一个整洁的数据框。

此外,还有许多替代方法可以修复重复的列名并使其独一无二;例如,make.uniquejanitor 包调用了 names(df)clean_names(df)

library(tidyverse)
library(readxl)

df <- read_excel("raw_data.xlsx", .name_repair = "minimal")

df %>%
  repair_names(sep = "_") %>%
  pivot_longer(-c(Family, Location), names_to = c(".value", "variable"), names_sep = "_") %>%
  select(-variable)