问题描述
我必须将一个非传统的文件导入R。我已经附加了一个带有伪造数据的小示例文件来演示该问题。我需要处理的原始数据显示在图像“原始”中,而我要创建的整理数据显示在图像“整理”中。
每个人都有(1)适用于同一组中所有个人的组级别信息,以及(2)仅适用于相应人的个人级别信息。在附件中,组级别数据包括家庭和位置。然后,根据组中有多少人,重复列出与每个人相关的列集。
例如,第2行代表居住在芝加哥的Smith一家。 Smith家族有3位成员,包括John,Sally和Ben。每个成员都有自己的重复列名称集,这些列名称具有相同的信息类型:名称,年龄,性别,兴趣爱好。这些列的每组名称都相同,每个家庭最多重复3个人(总共9列)。
我需要的是将这些数据导入R并将其转换为整齐的格式,最好使用tidyverse解决方案。
感谢您的帮助!
解决方法
也许最好的策略可能还取决于您输入原始数据的方式(例如,从Excel中输入)。
如果碰巧具有Excel数据,则可以使用read_excel
中的tidyverse
并可以包含.name_repair = "minimal"
来防止列名更改。
在这种情况下,使用repair_names
可以使重复的列名称具有一致的结构,也许带有下划线(这将为您提供Name
,Name_1
,{{1 }},Name_2
,Age
,Age_1
等)。
最后,您重复的列中的Age_2
将提供整洁的数据帧。
此外,还有许多其他方法可以修复重复的列名并使之唯一;例如,pivot_longer
从make.unique
包中调用了names(df)
或clean_names(df)
。
janitor