如何相对于一列增加不同列的值

问题描述 投票:0回答:2

假设我有

SAMPN      PERNO     loop     car   bus   walk    mode
  1          1         1        3.4   2.5  1.5     1
  1          1         1        3      2   1       2
  1          1         1        4      2   5       3
  1          1         2        14     1   3       1
  1          1         2        5      8   2       1
  2          1         1        1      5   5       3
  2          1         1        9      4   3       3

模式列与汽车和步行交叉。

mode==1    walk
mode==2    car
mode==3    bus

SAMPN是家庭,PERNO成员的家庭索引,每个人的环游。我想在每个循环中添加每个家庭中每个人的模式值。

例如在第一家庭SAMPN==1第一人称PERNO==1中,我们有3行用于第一次旅行loop==1。在此巡视模式下,第一行的模式是步行(mode==1),第二行的模式是汽车(mode==2),第三行的模式是公共汽车(mode==3

所以我将乘第二排的汽车和第三排的巴士3.4 + 2 + 5 = 10.4来增加第一排的步行路程。对其他人一样

输出:

SAMPN      PERNO     loop     car   bus   walk    mode   utility
  1          1         1        3.4   2.5  1.5     1   10.4
  1          1         1        3      2   1       2   10.4
  1          1         1        4      2   5       3   10.4
  1          1         2        14     1   3       1   19
  1          1         2        5      8   2       1   19
  2          1         1        1      5   5       3   8
  2          1         1        9      4   3       3   8
r dataframe
2个回答
0
投票
df %>%
  mutate(value = case_when(mode == 1 ~ car,   # using the order in the example,
                           mode == 2 ~ bus,   #   not the order in the table
                           mode == 3 ~ walk,
                           TRUE ~ 0)) %>%
  count(SAMPN, PERNO, loop, wt = value, name = "value")

## A tibble: 3 x 4
#  SAMPN PERNO  loop value
#  <int> <int> <int> <dbl>
#1     1     1     1  10.4
#2     1     1     2  19  
#3     2     1     1   8 

0
投票

我们可以做

library(dplyr)
df1 %>% 
   group_by(SAMPN) %>% 
   mutate(utility =  first(car) + bus[2] + walk[3])
© www.soinside.com 2019 - 2024. All rights reserved.