在dplyr中有条件地改变数据

Naz*_*zer 4 r dplyr

我试图通过基于标识符进行划分来改变数据.例如,我想mass在以下数据中进行变异.如果它是深度10,我想除以2.如果它是深度20,我想除以3.

day    year    depth    mass 
1      2008    10       13
2      2008    10       15
1      2008    20       14
2      2008    20       12
1      2009    10       14
2      2009    10       16
1      2009    20       12
2      2009    20       18   
Run Code Online (Sandbox Code Playgroud)

分部导致:

day    year    depth    mass 
1      2008    10      6.5
1      2008    10      6.5
2      2008    10      7.5
2      2008    10      7.5
1      2008    20      4.6
1      2008    20      4.6
2      2008    20      4
2      2008    20      4
1      2009    10      7
1      2009    10      7
2      2009    10      8
2      2009    10      8   
1      2009    20      4
1      2009    20      4  
2      2009    20      6 
2      2009    20      6  
Run Code Online (Sandbox Code Playgroud)

我正在尝试ifelse以下方式,但得到一个错误"未使用的参数(c(13,15,14 ..)"

df%>% 
  group_by(day, year, depth) %>% 
  bind_rows(., .) %>%
  mutate(mass = ifelse(depth == 10), mass/2,
         ifelse(depth == 20), mass/3)%>%
  arrange(day, year, depth, mass)
Run Code Online (Sandbox Code Playgroud)

Ben*_*min 6

我看到你使用的两个错误ifelse.在你所拥有的地方ifelse(depth == 10),你只给出了ifelse一个需要三个参数的论据.删除右括号,你有一个良好的开端.

您的第二个错误是,如果第二个ifelse条件解决,您没有说明该怎么做FALSE.在下面的代码中,我已经分配NA了这种情况.我不确定这是否是你想要的行为,所以你应该把它改成适合你需要的行为.

df%>% 
  group_by(day, year, depth) %>% 
  bind_rows(., .) %>%
  mutate(mass = ifelse(test = (depth == 10), 
                       yes = mass/2,
                       no = ifelse(test = (depth == 20), 
                                   yes = mass/3,
                                   no = NA))) %>%
  arrange(day, year, depth, mass)
Run Code Online (Sandbox Code Playgroud)


Hub*_*rtL 5

用法:

ifelse(test, yes, no)
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

ifelse(depth == 10, mass/2, ifelse(depth == 20, mass/3 , mass))
Run Code Online (Sandbox Code Playgroud)