R,dplyr:如何将日期框架元素除以特定元素

时间:2019-02-20 06:18:16

标签: r dplyr

编辑:最后的解决方案。

我有一个数据框,其中包含不同的变量以及这些不同变量的总和,称为变量“总计”。 我想添加一个新列来计算“总计”变量中每个变量的份额。 示例:

library(dplyr)

name <- c('A','A', 
          'B','B')
month = c("oct 2018", "nov 2018", 
         "oct 2018",  "nov 2018")

value <- seq(1:length(month))

df = data.frame(name, month, value)

# Create total variable
dfTotal  =
      df%>%
      group_by_("month")%>%
      summarize(value = sum(value, na.rm = TRUE))
dfTotal[["name"]] <-  "Total"
dfTotal = as.data.frame(dfTotal) 

# Add total column to dataframe
df2 = rbind(df, dfTotal)
df2

给出数据框

   name    month value
1     A oct 2018     1
2     A nov 2018     2
3     B oct 2018     3
4     B nov 2018     4
5 Total nov 2018     6
6 Total oct 2018     4

我想要的是在上面的数据框中生成一个新列,其中包含每个月总计的份额,这样我就得到类似的信息

   name    month value  share
1     A oct 2018     1  0.25 (=1/4)
2     A nov 2018     2  0.33 (=2/6)
3     B oct 2018     3  0.75 (=3/4)
4     B nov 2018     4  0.67 (=4/6)
5 Total nov 2018     6  1.00 (=6/6)
6 Total oct 2018     4  1.00 (=4/4)

有人知道我如何从第一个数据帧生成第二个数据帧的最后一列吗?

解决方案: 根据tmfmnk的评论,以下解决了该问题:

df2 = 
  df2 %>% 
  group_by(month) %>% 
  mutate(share = value/max(value))
df2

给出   名称月份价值份额

  <fct> <fct>    <int> <dbl>
1 A     oct 2018     1 0.25 
2 A     nov 2018     2 0.333
3 B     oct 2018     3 0.75 
4 B     nov 2018     4 0.667
5 Total nov 2018     6 1    
6 Total oct 2018     4 1

0 个答案:

没有答案