r - 在 R 中计算数据并生成行
问题描述
我想使用以下函数计算带有列的行:row * EXP(columns)
这是数据:
df<-read.table(text=" Time
2.5
2.1
2.2
3.1
4
-2
-3
-1",h=T)
df2= c(0.2, -0.1, 1, 2)
例如,2.5*EXp(0.2);2.5*EXP (-0.1), 2.5 *EXP(1), 2.5*EXP(2) 2.1,2.2,.....-3.0 相同。
这给了我下表:
0.2 -0.1 1 2
3.053506895 9.603172812 893.9989236 18.47264025
2.564945792 6.686954761 301.3860014 15.51701781
2.687086068 7.320234183 395.5273835 16.25592342
3.78634855 16.52700973 4567.282501 22.90607391
4.885611033 37.31329406 52739.88682 29.5562244
-2.442805516 0.16370736 0.004354421 -14.7781122
-3.664208274 0.066237252 0.00028734 -22.1671683
-1.221402758 0.404607662 0.065988036 -7.389056099
我可以基于 Excel =(A3*EXP($D$2)) 来完成,但我很难使用 R 来完成它。任何帮助将不胜感激。
解决方案
你可以这样做:
t(sapply(df$Time, function(e){e*exp(df2)}))
[,1] [,2] [,3] [,4]
[1,] 3.053507 2.2620935 6.795705 18.472640
[2,] 2.564946 1.9001586 5.708392 15.517018
[3,] 2.687086 1.9906423 5.980220 16.255923
[4,] 3.786349 2.8049960 8.426674 22.906074
[5,] 4.885611 3.6193497 10.873127 29.556224
[6,] -2.442806 -1.8096748 -5.436564 -14.778112
[7,] -3.664208 -2.7145123 -8.154845 -22.167168
[8,] -1.221403 -0.9048374 -2.718282 -7.389056
或者:
Reduce(rbind,lapply(df$Time, function(e){e*exp(df2)}))
[,1] [,2] [,3] [,4]
init 3.053507 2.2620935 6.795705 18.472640
2.564946 1.9001586 5.708392 15.517018
2.687086 1.9906423 5.980220 16.255923
3.786349 2.8049960 8.426674 22.906074
4.885611 3.6193497 10.873127 29.556224
-2.442806 -1.8096748 -5.436564 -14.778112
-3.664208 -2.7145123 -8.154845 -22.167168
-1.221403 -0.9048374 -2.718282 -7.389056
该exp
函数是矢量化的:
exp(df2)
[1] 1.2214028 0.9048374 2.7182818 7.3890561
所以这个想法是在你的指数前面循环因子向量,并连接输出。你可以用 for 循环和一个你也填充的空表来做旧式。这是我的建议:
lapply
是一个输出列表的循环:
lapply(df$Time, function(e){e*exp(df2)})
[[1]]
[1] 3.053507 2.262094 6.795705 18.472640
[[2]]
[1] 2.564946 1.900159 5.708392 15.517018
[[3]]
[1] 2.687086 1.990642 5.980220 16.255923
[[4]]
[1] 3.786349 2.804996 8.426674 22.906074
[[5]]
[1] 4.885611 3.619350 10.873127 29.556224
[[6]]
[1] -2.442806 -1.809675 -5.436564 -14.778112
[[7]]
[1] -3.664208 -2.714512 -8.154845 -22.167168
[[8]]
[1] -1.2214028 -0.9048374 -2.7182818 -7.3890561
要连接,您希望将所有列表上的行绑定在一起(与rbind
),这就是Reduce
要做的:在列表上应用一个函数。
sapply
是 lapply 的一个版本,它试图给出一个很好的输出,但它的含义是错误的,所以我不得不用t()
.
推荐阅读
- ruby-on-rails - rails 中计划的活动作业列表
- xml - 数组的自定义 XML Marshal,中间有字符串
- database - MongoDB 获取集合中的所有文档会使用 mgo 提供一个空的结构切片
- rappid - 如何使用 rappid 创建嵌套模板?
- flutter - 如何在行项目之间设置固定空间
- azure - 如何在 Azure Kubernetes 服务 (AKS) 中运行部署到 Virtual Kubelet 的 dockerized 'Hello World' Web 作业
- node.js - 不离开页面查询 ArangoDB
- python - 用python读取另一个程序的输出
- java - 如何根据特定单元对字符串数组进行升序排序?
- c# - TestStack.White 获取所有标签