r - 在使用 R 中的 lapply 遍历列时计算行值的百分比变化
问题描述
我有一个数据框,其中包含大量变量的每周值。我想遍历每一列并获得每行的每周变化和以百分比表示的变量。
例子:
a = c(2,3,1,9)
b = c(4,5,8,1)
sentiment = cbind(a,b) %>%
as.data.frame()`
Outcome should be:
a b a_delta b_delta
2 4 NA NA
3 5 0.5 0.3
1 8 -0.7 0.6
9 1 8.0 -0.8
在我目前的方法中,我使用两个步骤:(1)创建每周滞后,(2)计算滞后值和值之间的百分比差异。没有错误消息,但计算仍然不正确,我不知道为什么。任何帮助将非常感激!
library(data.table)
a = c(2,2.5,2,4)
b = c(4,5,8,1)
sentiment = cbind(a,b) %>%
as.data.frame()
setDT(sentiment)[, paste0(names(sentiment), "_delta") := lapply(.SD, function(x) shift(x, 1L,
type="lag")/x -1)]
解决方案
这是一个基本的 R 解决方案,使用sapply
传入的函数来lapply
迭代具有所需输出列名称的情感列,使用setNames
.
sentiment <- data.frame(a = c(2,3,1,9), b = c(4,5,8,1))
calc_lag <- function(x) {
c(NA, round(sapply(2:length(x), function(y) {
(x[y] - x[y-1]) / x[y-1]
}), 1))
}
cbind(sentiment, lapply(setNames(sentiment, paste0(colnames(sentiment), '_lag')), calc_lag))
# a b a_lag b_lag
#1 2 4 NA NA
#2 3 5 0.5 0.2
#3 1 8 -0.7 0.6
#4 9 1 8.0 -0.9
推荐阅读
- json - 在powershell中从json转换为csv
- python - 递增循环与字典的键关联的值,而不创建新的递增键
- javascript - 当导航为真时,在 owl carousel 1.3.3 中未触发 owl-item 上的单击事件
- c++ - 为什么这个重载的构造函数在花括号之外有它的信息并且仍然可以正常工作?
- windbg - 十六进制地址上的windbg dd命令给出????问号
- amazon-web-services - 在 AWS 中,为什么我们将 RDS 实例保留在私有子网中?
- azure - powerbi embed:无效授权:consent_required
- java - 使用 Apache Helix 时可以自定义分区名称吗?
- css - 如何不模糊边界边缘?
- javascript - 如何编写脚本以在我的邮件中发送报告