Вот вариант tidyverse
:
library(dplyr)
# modify df2 to define a more suitable Group variable
df2 <- df2 %>%
mutate(Link2 = gsub("file", "", Link)) %>%
group_by(Group) %>%
mutate(Link2 = paste("file", paste(Link2, collapse = "_"),
sep = "")) %>%
ungroup() %>% select(Link, Group = Link2)
# dplyr pipe chain
df1 %>%
t() %>% as.data.frame() %>%
tibble::rownames_to_column("Link") %>%
left_join(df2, by = "Link") %>%
group_by(Group) %>%
transmute_at(vars(num1:num6), sum) %>%
ungroup() %>% distinct() %>%
t() %>% as.data.frame() %>%
setNames(., as.character(unlist(.[1, ]))) %>%
tail(., -1)
# output
file1_4 file2_7 file3_6 file5
num1 2 11 4 4
num2 3 3 3 4
num3 2 2 1 1
num4 12 1 3 1
num5 4 1 0 0
num6 1 1 1 2
Данные
df1 <- structure(list(file1 = c(1L, 0L, 2L, 11L, 3L, 0L), file2 = c(0L,
1L, 0L, 0L, 1L, 0L), file3 = c(3L, 1L, 0L, 2L, 0L, 0L), file4 = c(1L,
3L, 0L, 1L, 1L, 1L), file5 = c(4L, 4L, 1L, 1L, 0L, 2L), file6 = c(1L,
2L, 1L, 1L, 0L, 1L), file7 = c(11L, 2L, 2L, 1L, 0L, 1L)), .Names = c("file1",
"file2", "file3", "file4", "file5", "file6", "file7"), class = "data.frame", row.names = c("num1",
"num2", "num3", "num4", "num5", "num6"))
df2 <- structure(list(Group = c(1L, 2L, 3L, 1L, 4L, 3L, 2L), Link = c("file1",
"file2", "file3", "file4", "file5", "file6", "file7")), .Names = c("Group",
"Link"), class = "data.frame", row.names = c(NA, -7L))