假设我有这个数据集开始,在这个愚蠢的布局中:
originalDF <- data.frame(
Index = 1:14,
Field = c("Name", "Weight", "Age", "Name", "Weight", "Age", "Height", "Name", "Weight", "Age", "Height", "Name", "Age", "Height"),
Value = c("Sara", "115", "17", "Bob", "158", "22", "72", "Irv", "210", "42", "68", "Fred", "155", "65")
)
我希望它看起来像这样:
基本上,我想将 Weight、Age 和 Height 行与其上方的 Name 行匹配。拆分数据很容易使用dplyr
:
namesDF <- originalDF %>%
filter(Field == "Name")
detailsDF <- originalDF %>%
filter(!Field == "Name")
从这里开始,使用索引(行号)似乎是最好的方法,即将每一行与具有最接近索引detailsDF
的条目匹配而不重复。namesDF
我使用了这个fuzzyjoin
包并加入了他们
fuzzy_left_join(detailsDF, namesDF, by = "Index", match_fun = list(`>`))
这种工作方式,但它也将每一行与每一行连接detailsDF
在一起,namesDF
并具有较小的索引号:
我想出了一个解决方案,使用到下一个索引的距离并以这种方式过滤掉多余的行,但我想避免这样做;实际的源文件将超过 200k 行,并且带有额外行的临时结果数据框太大而无法放入内存。有什么我可以在这里做的吗?谢谢!