【发布时间】:2017-12-31 03:58:58
【问题描述】:
我有这样一个程序的输出。
Keg tar tar jar jar EA_A EA_D EA_E EA_G
123F 0 1 0 0 0 0 0 0
134E 0 0 0 0 0 1 1 1
234B 0 0 0 0 0 0 0 0
Keg EA_B
123F 0
134E 0
234B 1
Keg tar tar jar jar EA_C EA_D EA_E
ABCD 0 1 0 0 0 0 0
13CD 0 0 0 0 0 1 1
234F 0 0 0 0 1 0 0
DCEF 0 0 0 0 0 0 0
Keg EA_F
ABCD 0
13CD 0
234F 1
DCEF 0
Keg tar tar jar jar EA_A EA_D EA_E EA_H
123C 0 1 0 0 0 0 0 0
134C 0 0 0 0 0 1 1 1
234C 0 0 0 0 0 0 0 0
Keg EA_B
123C 0
134C 0
234C 1
我正在尝试将输出安排为
Keg EA_A EA_B EA_C EA_D EA_E EA_F EA_G EA_H
123F 0 0 0 0 0 0 0 0
134E 0 0 0 1 1 0 1 0
234B 0 1 0 0 0 0 0 0
ABCD 0 0 0 0 0 0 0 0
13CD 0 0 0 1 1 0 0 0
234F 0 0 1 0 0 1 0 0
DCEF 0 0 0 0 0 0 0 0
123C 0 0 0 0 0 0 0 0
134C 0 0 0 1 1 0 0 1
234C 0 1 0 0 0 0 0 0
我在这里问了一个非常相似的问题(R:How to attach parts of a data frame with different headers and/or an overflowing piece of the dat frame) 前段时间并得到了答案。当我尝试使新输出适合旧解决方案时,我得到了错误的输出。
我将之前的大部分帖子都包含在此处,以使该帖子自成一体。在我看来,以前的解决方案应该有效,但我不确定我错过了什么。
旧帖:
假设两个连续酒桶之间的文本为一个块。
在此示例中,前两个块具有相同的 Keg 值。实际上,文本溢出,导致第二个块具有相同的 Keg 值。每个新块(不是溢出的块)都有一个 tar 列。
列 tar 和 jar 需要在最后被剥离,如输出所示。列数是有限的,可以假设为(“EA_A”、“EA_B”、“EA_C”、“EA_D”、“EA_E”、“EA_F”、“EA_G”、“EA_H”)。
输出中可以有任意数量的块。任何溢出的块都将位于其族的正下方。数据块将始终具有列名,这些列名是有限名称集的一部分。列名不重复。
我们也可以拥有具有不同列名顺序的数据块。
这是我正在使用的代码(或者我从上一篇文章中得到的)
nm1 <- c("EA_A", "EA_B", "EA_C", "EA_D", "EA_E", "EA_F", "EA_G","EA_H")
temp = split(df1, cumsum(grepl("[A-Z]", df1$tar))) %>%
map(~ if(any(grepl("[A-Z]", .$tar))) {
names(.) <- unlist(.[1,])
.[-1,]
} else .) %>%
map(~ .[names(.) != ""]) %>%
bind_rows %>%
group_by(Keg) %>%
summarise_at(vars(intersect(nm1, names(.))), funs(sum(as.numeric(.),
na.rm = TRUE)))
【问题讨论】:
-
试图弄清楚我需要在代码中更改什么以使其正常工作。很确定我的理解是这里的问题。 @akrun
-
有什么想法吗? @akrun