在一个数据框中合并具有相似名称的多个列

时间:2017-05-04 10:04:14

标签: r

我有这样的df:

 id  mon.1  tue.1 wed.1 mon.2  tue.2 wed.2 mon.3  tue.3 wed.3
HD82   1     0     1      1     0      1     1     0      0
HD83   0     0     0      1     1      0     1     0      1
HD84   1     1     0      1     1      0     0     1      0

每个mon/tue/wed列包含多个星期内已经测量过的次数,但是我希望将这些列组合起来以便每天都有一个总计,以及一个看起来像这样的数据框:

id mon tue wed

e.g。我想创建一个数据框,其中列将是monday = mon.1 + mon.2 + mon.3,tuesday = tue.1 + tue.2 + tue.3 etc

任何想法我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:0)

一种方法是在.之前提取部分。这可以通过以下功能完成:

day_extract<-function(x)
{
  x<-as.character(x)
  strsplit(x, ".", fixed = T)[[1]][1]
}

尝试将此功能应用于数据帧。

答案 1 :(得分:0)

您的df目前采用wide格式,其中每个单元格(id列除外)代表一次测量。您可以使用tidyr将其转换为long格式 - 其中数据框中的每一行代表一个度量值,然后在几天内轻松汇总:

library(tidyr)
library(dplyr)
#some dummydata
df <- data.frame(a.1=c(1:10),
                 a.2 = c(1:10),
                 b.foo = c(1:10),
                 stringsAsFactors = FALSE)
#transform to long format
dfLong <- gather(df,"dayWeek","value") %>%
#extract day name
         mutate(day = gsub("\\..*","",dayWeek)) %>%
#summarise
         group_by(day) %>%
         summarise(dayTotal = sum(value))