r - 在现有行之间添加具有特定值的行

标签 r dplyr purrr

我有曲棍球数据,称为 df

structure(list(event_index = 1:57, coords_x = c(80, 53, 31, -56, 
-34, -33, -40, 30, -66, -36, 45, 17, -6, 47, -51, -31, -69, -86, 
-70, 80, 65, -76, -71, 81, -57, 80, 75, 77, -71, -40, -83, 62, 
77, 76, NA, -61, 69, -45, 68, 31, 58, 61, 80, 34, 80, -85, -37, 
-57, 76, 14, 49, -82, -34, -36, -83, -84, -55), coords_y = c(-1, 
14, -30, 17, 26, -23, -37, 17, -32, -18, 25, 17, -38, 21, 28, 
22, 17, 13, 10, -37, -17, 9, 18, -11, 21, -7, 3, 3, -38, 31, 
8, -30, -2, 4, NA, -5, 15, 10, -30, -34, 20, 27, -4, 8, -18, 
19, 32, -21, 0, 40, -4, -30, -24, -28, -2, -3, 34), event_rinkside = c("R", 
"R", "R", "L", "L", "L", "L", "R", "L", "L", "R", "N", "N", "R", 
"L", "L", "L", "L", "L", "R", "R", "L", "L", "R", "L", "R", "R", 
"R", "L", "L", "L", "R", "R", "R", NA, "L", "R", "L", "R", "R", 
"R", "R", "R", "R", "R", "L", "L", "L", "R", "N", "R", "L", "L", 
"L", "L", "L", "L")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -57L))

我如何在每一行之后创建行,留下 57 * 2(114 行),但我新创建的行中的值取决于 event_rinkside 列。

  • 如果 event_rinkside 等于 R,那么,我想将 82 插入 coords_x0 coords_y
  • 如果 event_rinkside 等于 L,那么,我想将 -82 插入 coords_x 0coords_y

我觉得这个 SO question 的解决方案是一个很好的起点,但我不知道如何结合我自己的条件:

这是我正在谈论的解决方案:

library(purrr)
df %>%
  group_by(id) %>%
  map_dfr(rbind, NA) %>%
  mutate(id = rep(df$id, each = 2))

最佳答案

这是一个使用 dplyr 的解决方案:

library(dplyr)

df %>%
  mutate(coords_x = 82 * ifelse(event_rinkside == "L", -1, 1),
         coords_y = 0) %>%
  rbind(df, .) %>%
  arrange(event_index)

工作原理:

在第一步中,mutate 用于修改df 的未分配副本。 coords_x 列的值为 82;如果 event_rinkside == "L" 则该值乘以 -1,否则乘以 1。 coords_y 列的值为 0。

在下一步中,未更改的原始数据帧df 及其当前未分配和修改的副本与rbind 组合。此处,. 表示上述 mutate 步骤的结果。 rbind 的结果是原始版本的行在修改版本的行之上。

在最后一步中,arrange 用于根据 event_index 的值对行进行排序。这样,每个原始行后面直接跟着相应的修改行。

结果:

# A tibble: 114 x 4
   event_index coords_x coords_y event_rinkside
         <int>    <dbl>    <dbl> <chr>         
 1           1       80       -1 R             
 2           1       82        0 R             
 3           2       53       14 R             
 4           2       82        0 R             
 5           3       31      -30 R             
 6           3       82        0 R             
 7           4      -56       17 L             
 8           4      -82        0 L             
 9           5      -34       26 L             
10           5      -82        0 L             
# … with 104 more rows

关于r - 在现有行之间添加具有特定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261378/

相关文章:

r - 抑制 R 中的静态代码检查( future 包)

r - 方便地移动列

r - 比较r中四个ROC曲线的auc

r - 总结这个数据框的更好方法是什么?

R:purrr:使用 pmap 进行逐行操作,但这次涉及很多列

r - 如何映射嵌套数据框并将多列存储为输出

r - 为什么在执行 map(str_match_all()) 后需要将数据帧索引到 map() ?

r - 从 R 中的包装文本创建表格

r - 如何将 ggplot 旋转为横向?

根据列删除条件行