R:评估当前观察和先前观察的所有成对比较的函数
R: Evaluate function for all pairwise comparison of current observation and previous observations
Equation to be modeled in R
Structure of the Data
变量gdp_pc_ppp
对应等式中的y。变量 gdp_pc_ppp
已经从最小值到最大值排序。变量 world_pop_share
对应于等式中的 p。
我需要在 R 中编写代码来创建一个新变量,如下所示:
For the first row, it evaluates to NA
For the second row: (651.9531 - 378.5343)*9.568926e-03*2.636202e-03
For the third row: ((742.9709 - 651.9531)*8.084378e-03*9.568926e-03)
+ ((742.9709 - 378.5343)*8.084378e-03*2.636202e-03)
For the fourth row: ((744.1971 - 742.9709)*1.878016e-03*8.084378e-03)
+ ((744.1971 - 651.9531)*1.878016e-03*9.568926e-03)
+ ((744.1971 - 378.5343)*1.878016e-03*2.636202e-03)
以下观察等等。
我需要在不同的年份做这件事,因此,我试图在 tidy verse 语法中做这件事。
例如:
d = d %>%
group_by(year) %>%
mutate( INSERT HERE FUNCTION THAT WOULD CALCULATE EQUATION ABOVE )
谢谢。
我认为这些是你的数据,或多或少。
data <- data.frame(country=c("Moz.", "Eth.", "Mya.", "Mal.", "Uga."),
year= c(1990, 1990, 1990, 1990, 1990),
gdp_pc_ppp=c(378.5, 651.9, 742.9, 744.2, 782.0),
world_pop_share=c(2.6e-3,9.5e-3,8.1e-3,1.8e-3,3.5e-3))
为了做你想做的事,我写了这个函数。
my.math <- function(data, y, p) {
# check args
if(!is.data.frame(data))
stop("Bad input!")
# Do the math
out <- sapply(2:nrow(data), (function(i){
p.i <- data[i, p]
y.i <- data[i, y]
sum(sapply(1:i, (function(j){
p.tmp <- data[j, p]
y.tmp <- data[j, y]
(y.i - y.tmp) * p.i * p.tmp
})), na.rm = TRUE)
}))
return(c(NA, out))
}
这就是您获得结果的方式。它是否按预期工作?
my.math(data,
y = 3, # your y is the third column
p = 4) # your p is the fourth column)
在我手里,它returns:
[1] NA 0.00675298 0.01467671 0.00330876 0.00934430
Equation to be modeled in R
Structure of the Data
变量gdp_pc_ppp
对应等式中的y。变量 gdp_pc_ppp
已经从最小值到最大值排序。变量 world_pop_share
对应于等式中的 p。
我需要在 R 中编写代码来创建一个新变量,如下所示:
For the first row, it evaluates to NA
For the second row: (651.9531 - 378.5343)*9.568926e-03*2.636202e-03
For the third row: ((742.9709 - 651.9531)*8.084378e-03*9.568926e-03)
+ ((742.9709 - 378.5343)*8.084378e-03*2.636202e-03)
For the fourth row: ((744.1971 - 742.9709)*1.878016e-03*8.084378e-03)
+ ((744.1971 - 651.9531)*1.878016e-03*9.568926e-03)
+ ((744.1971 - 378.5343)*1.878016e-03*2.636202e-03)
以下观察等等。
我需要在不同的年份做这件事,因此,我试图在 tidy verse 语法中做这件事。
例如:
d = d %>%
group_by(year) %>%
mutate( INSERT HERE FUNCTION THAT WOULD CALCULATE EQUATION ABOVE )
谢谢。
我认为这些是你的数据,或多或少。
data <- data.frame(country=c("Moz.", "Eth.", "Mya.", "Mal.", "Uga."),
year= c(1990, 1990, 1990, 1990, 1990),
gdp_pc_ppp=c(378.5, 651.9, 742.9, 744.2, 782.0),
world_pop_share=c(2.6e-3,9.5e-3,8.1e-3,1.8e-3,3.5e-3))
为了做你想做的事,我写了这个函数。
my.math <- function(data, y, p) {
# check args
if(!is.data.frame(data))
stop("Bad input!")
# Do the math
out <- sapply(2:nrow(data), (function(i){
p.i <- data[i, p]
y.i <- data[i, y]
sum(sapply(1:i, (function(j){
p.tmp <- data[j, p]
y.tmp <- data[j, y]
(y.i - y.tmp) * p.i * p.tmp
})), na.rm = TRUE)
}))
return(c(NA, out))
}
这就是您获得结果的方式。它是否按预期工作?
my.math(data,
y = 3, # your y is the third column
p = 4) # your p is the fourth column)
在我手里,它returns:
[1] NA 0.00675298 0.01467671 0.00330876 0.00934430