通过正则表达式匹配列并使用R dplyr中的mutate执行计算?

时间:2018-10-21 11:51:35

标签: r dataframe dplyr tidyverse

我得到了这样的数据框:

uncalibrated_gyro_x uncalibrated_gyro_y uncalibrated_gyro_z
1                   4                   7
2                   5                   8
3                   6                   9

有时我将这些列作为unc_gyr_x, unc_gyr_y, unc_gyr_z

无论如何,我需要计算其范数:sqrt(x^2 + y^2 + z^2)

这些列是包含50列的大型数据框的一部分。

如何使用mutate“告诉” regex来使用这些列有时以uncalibrated_gyro_x,y,z的形式给出,而另一些列以unc_gyr_x,y,z的形式给出?

我知道有一个功能matches,但在mutate中对我不起作用。

请告知。

1 个答案:

答案 0 :(得分:2)

一种方法是有条件地重命名变量,以便它们一致并从那里开始:

df %>% 
   rename_at(vars(starts_with("uncalibrated_gyro_")),
             funs(sub("uncalibrated_gyro_", "unc_gyr_", .))) %>%
   mutate(myvar = sqrt(rowSums(select(.,starts_with("unc_gyr_"))^2)))