2017-05-04 82 views
0

我有一个这样的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 

例如我想制作一个数据帧,其中列会是星期一= mon.1 + mon.2 + mon.3,星期二= tue.1 + tue.2 + tue.3等

任何想法我会怎么做这个?

谢谢。

+1

你能提供一个可重复的例子吗?例如与输入? 我不确定我是否理解您的请求,您想要创建一个数据框,其中day = day.1 + day.2 + day.3? – Arault

+1

请提供一些虚拟数据来处理,并展示你到目前为止已经尝试过的东西(例如''dput'ting你的'df' –

+0

是你的列名总是结构为day.number?即你能提取'''之前的那一部分以便有一天的部分? –

回答

0

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

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

尝试将此函数应用于您的数据框。

0

您的df当前为wide格式,其中每个单元格(除id列之外)代表一个测量值。您可以使用tidyr将其转换为long格式-where在数据帧的每一行代表一个测量,然后容易聚集在天:

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)) 
相关问题