R 如何为3个组的列添加一些值?
我有3列:SAMPN,PERNO,loop。以及对应于3种模式的实用程序。卡罗布和步行 我想添加具有相同SAMPN、PERNO和loop的行的实用程序。对于car.car,bus.bus,walk.walk,walk.bus和bus.walk 范例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
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))