R 如何为3个组的列添加一些值?

R 如何为3个组的列添加一些值?,r,dataframe,R,Dataframe,我有3列:SAMPN,PERNO,loop。以及对应于3种模式的实用程序。卡罗布和步行 我想添加具有相同SAMPN、PERNO和loop的行的实用程序。对于car.car,bus.bus,walk.walk,walk.bus和bus.walk 范例 SAMPN PERNO PLANO loop walk car bus MODE1 <chr> <fct> <fct

我有3列:SAMPN,PERNO,loop。以及对应于3种模式的实用程序。卡罗布和步行 我想添加具有相同SAMPN、PERNO和loop的行的实用程序。对于car.car,bus.bus,walk.walk,walk.bus和bus.walk

范例

   SAMPN PERNO  PLANO loop      walk               car               bus            MODE1
  <chr>   <fct> <fct> <fct> <chr>              <chr>             <chr>              <fct>
1 "    4" 1     " 2"  2     -0.990765697239748 2.09989661853416  -0.92177603128108  2    
2 "    4" 1     " 7"  2     0.11385013993979   1.09436996098927  -0.534987482042767 2    
3 "    4" 2     " 2"  2     0.500507525721786  0.924888419124695 -0.376370439308976 2    
4 "    4" 2     " 7"  2     -0.299078042202768 1.54226436622111  -0.289562610169849 2    
5 "    6" 1     " 2"  2     -0.991897610390741 1.58114646818508  -0.973443199067661 2    
6 "    6" 1     " 3"  2     -1.05376527366975  1.61719511863015  -0.832468269682489 2 
其他人也一样

我知道如果我想在每一行中添加值,我可以这样做:但是如何在不同的行中添加实用程序呢

kl<-r %>%
+   group_by(SAMPN, PERNO,loop) %>%
+   mutate(car.car = car+car, walk.walk=walk+walk, bus.bus=bus+bus, walk.bus=walk+bus, bus.walk=bus+walk)
仅前两行的输出:

 SAMPN PERNO  PLANO loop      car.car      bus.bus  walk.walk    walk.bus  bus.walk  MODE1

1 "    4" 1     " 2"  2    3.194267    -1.456764    -0.8769156  -1.456764  -0.8079259   2
2 "    4" 1     " 7"  2    3.194267    -1.456764    -0.8769156  -1.456764  -0.8079259   2

如果我们需要为特定的组合创建,在
groupby
步骤之后,可以逐个创建列

library(dplyr)
df1 %>% 
   group_by(SAMPN, PERNO, loop) %>%
   mutate_at(vars(walk:bus), as.numeric) %>%
   mutate(walk.bus = first(walk) + last(bus), 
           bus.walk = first(bus) + last(walk), 
           walk.walk = sum(walk),
           bus.bus = sum(bus), 
           car.car = sum(car))

如果问题不清楚,请让我进一步解释。我知道一个解决方案是将具有相同SAMPN、PERNO、循环的行彼此相邻,然后使用mutate。但是我正在寻找更简单的解决方案。你能显示预期的输出吗?我为两个具有相同SAMPN、PERNO和loop的第一行编写了输出,我希望如果不能,我可以为其余的行做就足够了。对于
car.car
,我想你是在将第一行与第二行相加,对吗。步行巴士怎么样
 SAMPN PERNO  PLANO loop      car.car      bus.bus  walk.walk    walk.bus  bus.walk  MODE1

1 "    4" 1     " 2"  2    3.194267    -1.456764    -0.8769156  -1.456764  -0.8079259   2
2 "    4" 1     " 7"  2    3.194267    -1.456764    -0.8769156  -1.456764  -0.8079259   2
library(dplyr)
df1 %>% 
   group_by(SAMPN, PERNO, loop) %>%
   mutate_at(vars(walk:bus), as.numeric) %>%
   mutate(walk.bus = first(walk) + last(bus), 
           bus.walk = first(bus) + last(walk), 
           walk.walk = sum(walk),
           bus.bus = sum(bus), 
           car.car = sum(car))