【发布时间】:2021-04-02 17:01:50
【问题描述】:
我正在尝试创建一个循环遍历数据框列并使用公式 j/j+lead(j) 替换奇数行 (j) 中的值的函数,其中lead(j) 是下一个(偶数) 排。反过来,我想用公式 j/j+lag(j) 替换偶数行中的值,其中 lag(j) 是来自前进(奇数)行的值。
我遇到了两个问题:
- 所写的函数返回 NA 的替换值。
- 奇数和偶数的替换应基于原始列值。
显而易见的方法是为替换值创建第二列,以便原始列保持不变。但是,我还没有达到这一点。
如果有任何建议,我将不胜感激:a) 更正我的代码,使其不会产生 NA; b) 修改代码,使计算值包含在第二列(逐行)中,而不是替换原始列中的值。
我正在尝试在不使用管道和变异的情况下执行此操作 - 用于练习。但是,看看我可以采取哪些其他方法来用更少的代码实现相同的目的会很有帮助。
x<-(c(4,3,5,6,2,1))
df<-as.data.frame(x)
func<- function(x){
for(i in seq(1,length(x))){
for(j in x){
if(i%%2 == 1){
j = j/lead(j)+j}
else if(i%%2 == 0){
j = j/lag(j)+j}
}
show(j)
}
}
func(df$x)
【问题讨论】:
-
您的指令与您的代码不同。它说 j/j + lead(j),实际上只是 1 + lead(j),而你的代码说 j/lead(j) + j,我猜是后者是正确的?
-
啊 - 我忘了在这个例子中添加括号。它应该是 j/(lead(j)+1)。很抱歉造成混乱。
标签: r function dataframe dplyr