【问题标题】:Lag (Hmisc) with a shift argument defined in another column R滞后 (Hmisc) 与在另一列 R 中定义的移位参数
【发布时间】:2016-10-05 09:25:12
【问题描述】:

为了简单起见,我希望 C 列等于 列 B 的滞后,移位参数取决于整数 在A列中,所以我想要:

   A | B | C  
   0 | 5 | 5 
   2 | 6 | NA 
   3 | 7 | NA 
   2 | 8 | 6

我试过了:

library(dplyr)
library(Hmisc)
data <- mutate(data, 
    C= Lag(B, shift=as.integer(A)),

但它不起作用,我只得到 NA,这可能是类型问题,但 我不确定即使使用 as.integer 它也不起作用,是否 有人知道为什么它不起作用吗?

非常感谢

【问题讨论】:

  • 你确定你的输出是正确的吗?我觉得应该是5, NA, NA, 6试试diag(sapply(df$A, function(i) lag(df$B, i)))
  • 哦,是的,我弄错了,谢谢!

标签: r dplyr lag hmisc


【解决方案1】:

dplyr 中的lag 也有 shift 参数,所以不需要加载另一个包。一种方法是,

library(dplyr)
df$C <- diag(sapply(df$A, function(i) lag(df$B, i)))
df
#  A B  C
#1 0 5  5
#2 2 6 NA
#3 3 7 NA
#4 2 8  6

【讨论】:

  • 我收到错误“n 必须是单个正整数”,即使我在 i 之前添加 as.integer 也是如此
  • df$A 中有负整数吗?可以分享str(data)吗?
  • 这些都是 num,但是是的,我在 df$A 中有负整数,Lag (Hmisc) 负整数采用前向值而不是之前的值!零似乎也是一个问题,当我没有任何负值但我有零时,我得到错误: if (n == 0) return(x) 中的错误:需要 TRUE/FALSE 的缺失值跨度>
  • 你想如何对待这些?如果将负数转换为正数,可以吗? (即diag(sapply(abs(df$A), function(i) lag(df$B, i))) 至于 0,它似乎正在处理您分享的示例。
  • 我需要采用前向值,所以我无法从负数转换为正数,也许我需要找到滞后以外的其他东西
【解决方案2】:

解决方案: shift 参数似乎没有将列值作为整数, 所以我用另一种方式做到了:

df$C <- apply(as.data.frame(df$A), 1, function(i){ 
    nth(df$B, i) 
})

取B的第n个值,n在A列中

(非常感谢 Sotos 帮助我)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多