我的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,如下面的步骤,转义循环结构。
使用函数创建新的命名列:le。? = fun(f。?)(?
的位置是1,4,6,5,9。列名称是le.?
。le
后面的数字可能会改变。过程
根据参数enfoo
求解方程L, T, f.?
,每个方程的根绑定到df
我在这个问题上遇到的问题是:
f.?
命名的列进行切片并使用ddplyr
创建新列?f.?
对哪些列le.?
进行切片?相同的数字? 答案 0 :(得分:0)
如果我正确理解了这个问题,那么这可能有所帮助。
请注意,出于演示目的,我在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"))