对 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.default
和 rowSums
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)
你好,我有以下数据框:
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.default
和 rowSums
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)