按组,通过对行的一部分求和来创建新列

时间:2017-11-17 23:53:10

标签: r

我确定已经在某个地方得到了回答,但我一整天都在尝试不同的方法而没有成功。下面是我的大型数据框的一部分。按小组(' legal'),我想总计3列,并为每个组创建一个新列'总。

我的数据框:

 legal y2015 y2016 y2017
  NE2    0     1      1
  NE2    0     1      1
  SW4    1     0      0 
  SW4    1     0      0

期望的结果:

 legal y2015 y2016 y2017  total
  NE2    0     1      1     2
  NE2    0     1      1     2
  SW4    1     0      0     1
  SW4    1     0      0     1

我已经尝试过,ColSums,ddply等等,并且会遇到各种错误,通常我的替换行数比我的数据少。我工作的例子与我想要实现的有点不同。

1 个答案:

答案 0 :(得分:1)

df$total = rowSums(df[,2:4])

我对df进行子集化以避免对字符串求和。最好使用dplyr::selectsubset来指定列,这样就可以避免使用数字索引。

编辑:注意到你说"按组",这让我感到困惑,因为你的例子每组都有多行。如果你真的想要

 legal y2015 y2016 y2017  total
  NE2    0     2      2     4
  SW4    2     0      0     2

您可以先使用dplyr

df = df %>% group_by(legal) %>% 
summarise(y2015 = sum(y2015), 
          y2016 = sum(y2016), 
          y2017 = sum(y2017))

然后在结果

上使用rowSums