我试图复制你想要的。
library(data.table)
# Replicates your main dataframe
group <- c(1, 2, 3)
additional_data <- c(rep(NA))
additional_data2 <- c(rep(NA))
main <- setDT(data.frame(group, additional_data, additional_data2)) # setDT makes it a data.table and data.frame format
# Replicates your second dataframe
name <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
group <- c(1, 2, 3, 1, 2, 3, 1, 2, 3)
score <- c(10, 5, 7, 7, 10, 9, 8, 3, 8)
data <- setDT(data.frame(name, group, score))
# Use data.table to create your columns (dplyr might be easier for you)
data[, raw_score := sum(score), by = c("group")]
data[, total_score := raw_score + 5]
# Only takes unique "group" values and removes name and score
data <- unique(data, by = c("group"))[, c("name", "score") := NULL]
# Final output (merges your second data w/ first data by group)
data_final <- merge(main, data, all.x = TRUE, by = c("group"))
最终输出:
group additional_data additional_data2 raw_score total_score
1: 1 NA NA 25 30
2: 2 NA NA 18 23
3: 3 NA NA 24 29