对 R 中数据框中的重复列求和

Sum duplicated columns in dataframe in R

你好,我有以下数据框:

colnames(tv_viewing time) <-c("channel_1", "channel_2", "channel_1", "channel_2")

每行给出个人在频道 1 和频道 2 上的观看时间,例如个人 1 我得到:

tv_viewing_time[1,] <- c(1,2,4,5)

我想要的实际上是一个汇总重复列的值的数据框。 IE。我会得到

colnames(tv_viewing time) <-c("channel_1", "channel_2")

例如个人 1 我会得到:

tv_viewing_time[1,] <- c(5,7)

因为当所有两行条目对应于重复的列名时,它们会被相加。

我一直在寻找答案,但其他线程上的所有建议都不适用于我的数据框案例。 请注意,还有更多重复列,因此我正在寻找一种可以有效应用于所有重复列的解决方案。

我们可以使用 split.defaultrowSums

sapply(split.default(tv_viewing_time, 
       sub("\.\d+$", "", names(tv_viewing_time))), rowSums)

-输出

# channel_1 channel_2 
#       5         7 

或使用tidyverse

library(dplyr)
library(tidyr)
library(stringr)
tv_viewing_time %>% 
  pivot_longer(cols = everything()) %>%
  group_by(name = str_remove(name, "\.\d+$")) %>% 
  summarise(value = sum(value)) %>% 
  pivot_wider(names_from = name, values_from = value)
# A tibble: 1 x 2
#  channel_1 channel_2
#      <dbl>     <dbl>
#1         5         7

数据

tv_viewing_time <- data.frame(channel_1 = 1, channel_2 = 2, 
        channel_1 = 4, channel_2 = 5)