使用 dplyr 处理 df

process df with ddplyr

我的 df 是这样的:

    L   T        m       EI      f.1      f.4      f.6      f.5      f.9
1  10 1.0 6.190004 9988.997  6.59710 13.38665 20.55083 28.25382 36.63822
6  10 3.5 6.190004 9988.997 12.11441 24.33067 36.74911 49.46745 62.58052
19 25 1.0 6.190004 9988.997  2.57757  5.16730  7.78128 10.43146 13.12981
24 25 3.5 6.190004 9988.997  4.79088  9.58822 14.39848 19.22824 24.08453

现在我想用 ddplyr 按照以下步骤处理这个 df,转义循环结构。

我在这个过程中遇到的问题是:

  1. 如何分割以 f.? 命名的列并使用 ddplyr 创建新列?
  2. 如何根据 clomuns le.? 在哪里对列 f.? 进行切片?相同的数字?

如果我正确理解了这个问题,那么这可能会有所帮助。

请注意,出于演示目的,我在 f.* 列上应用了一个简单的函数来创建 le.* 列。即 l.* = (f.*) / 2.

在下面的代码中,您可以通过调整 funs 参数将这个简单的函数替换为您定义的函数。

library(dplyr)
df %>%
  mutate_at(vars(f.1:f.9), funs(le=./2)) %>%
  rename_at(vars(f.1_le:f.9_le), funs(gsub("[a-zA-Z]+[.](\d+)[_](\S+)","\2.\1",.)))

输出为:

   L   T        m       EI      f.1      f.4      f.6      f.5      f.9     le.1      le.4     le.6     le.5
1 10 1.0 6.190004 9988.997  6.59710 13.38665 20.55083 28.25382 36.63822 3.298550  6.693325 10.27542 14.12691
2 10 3.5 6.190004 9988.997 12.11441 24.33067 36.74911 49.46745 62.58052 6.057205 12.165335 18.37456 24.73372
3 25 1.0 6.190004 9988.997  2.57757  5.16730  7.78128 10.43146 13.12981 1.288785  2.583650  3.89064  5.21573
4 25 3.5 6.190004 9988.997  4.79088  9.58822 14.39848 19.22824 24.08453 2.395440  4.794110  7.19924  9.61412
       le.9
1 18.319110
2 31.290260
3  6.564905
4 12.042265

示例数据:

df <- structure(list(L = c(10L, 10L, 25L, 25L), T = c(1, 3.5, 1, 3.5
), m = c(6.190004, 6.190004, 6.190004, 6.190004), EI = c(9988.997, 
9988.997, 9988.997, 9988.997), f.1 = c(6.5971, 12.11441, 2.57757, 
4.79088), f.4 = c(13.38665, 24.33067, 5.1673, 9.58822), f.6 = c(20.55083, 
36.74911, 7.78128, 14.39848), f.5 = c(28.25382, 49.46745, 10.43146, 
19.22824), f.9 = c(36.63822, 62.58052, 13.12981, 24.08453)), .Names = c("L", 
"T", "m", "EI", "f.1", "f.4", "f.6", "f.5", "f.9"), class = "data.frame", row.names = c("1", 
"6", "19", "24"))