首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >na.locf -不允许负长度向量

na.locf -不允许负长度向量
EN

Stack Overflow用户
提问于 2019-05-28 14:32:28
回答 2查看 70关注 0票数 0

我正在尝试使用以下代码将非na值传递到下一个非na值:

代码语言:javascript
复制
test3 <- data.table(final_data)

test3 <- test3[, na.locf(test3, na.rm = F, fromLast = F, maxgap = Inf), by = "gvkey"]

当我不包括..。部分,部分然而,当我到达一个新的gvkey时,我需要代码停止,否则它会传递错误的公司数据。我得到了长格式(下面的例子)。正如您所看到的,如果我不使用...by =gvkey,它会将gvkey1的值传递给gvkey2,这是我想要避免的。但是,在这样做时,我会收到以下错误消息:

[.data.table中的错误(test3,,na.locf(test3,na.rm = F,fromLast = F,:负长度向量不允许)

代码语言:javascript
复制
<table><tbody><tr><th>date</th><th>gvkey</th><th>dlcq</th><th>dlttq</th></tr><tr><td>date1</td><td>gvkey1</td><td>10</td><td>20</td></tr><tr><td>date2</td><td>gvkey1</td><td>NA</td><td>NA</td></tr><tr><td>date3</td><td>gvkey1</td><td>NA</td><td>10</td></tr><tr><td>.</td><td> </td><td> </td><td> </td></tr><tr><td>.</td><td> </td><td> </td><td> </td></tr><tr><td>.</td><td> </td><td> </td><td> </td></tr><tr><td>date10</td><td>gvkey2</td><td>NA</td><td>NA</td></tr><tr><td>date11</td><td>gvkey2</td><td>10</td><td>NA</td></tr><tr><td>date12</td><td>gvkey2</td><td>NA</td><td>NA</td></tr></tbody></table>

欢迎您提出任何建议或解决方案!

EN

回答 2

Stack Overflow用户

发布于 2019-05-28 14:44:24

在最新的开发版本(v1.12.3)中使用data.table::nafill(),形成data.table

代码语言:javascript
复制
DT <- fread("date | gvkey | dlcq | dlttq
            date1 | gvkey1 | 10 | 20
            date2 | gvkey1 | NA | NA 
            date3 | gvkey1 | NA | 10 
            date10 | gvkey2 | NA | NA 
            date11 | gvkey2 | 10 | NA 
            date12 | gvkey2 | NA | NA")

cols = c("dlcq", "dlttq")
DT[, (cols) := lapply( .SD, nafill, type = "locf" ), by = gvkey, .SDcols = cols][]

#      date  gvkey dlcq dlttq
# 1:  date1 gvkey1   10    20
# 2:  date2 gvkey1   10    20
# 3:  date3 gvkey1   10    10
# 4: date10 gvkey2   NA    NA
# 5: date11 gvkey2   10    NA
# 6: date12 gvkey2   10    NA

有关加载开发版本的说明,请参见:https://github.com/Rdatatable/data.table/wiki/Installation

票数 1
EN

Stack Overflow用户

发布于 2019-05-28 14:42:35

使用“注释”末尾可重复显示的数据,我不会收到任何错误消息:

代码语言:javascript
复制
library(data.table)
library(zoo)

test3[, na.locf(test3, na.rm = FALSE, fromLast = FALSE, maxgap = Inf), by = "gvkey"]

给出这个没有错误的答案,虽然这不是我们想要的答案。

代码语言:javascript
复制
     gvkey   date  gvkey dlcq dlttq
 1: gvkey1  date1 gvkey1   10    20
 2: gvkey1  date2 gvkey1   10    20
 3: gvkey1  date3 gvkey1   10    10
 4: gvkey1 date10 gvkey2   10    10
 5: gvkey1 date11 gvkey2   10    10
 6: gvkey1 date12 gvkey2   10    10
 7: gvkey2  date1 gvkey1   10    20
 8: gvkey2  date2 gvkey1   10    20
 9: gvkey2  date3 gvkey1   10    10
10: gvkey2 date10 gvkey2   10    10
11: gvkey2 date11 gvkey2   10    10
12: gvkey2 date12 gvkey2   10    10

问题是,在test3中引用test3的正确方法是使用.SD,如下所示:

代码语言:javascript
复制
test3[, na.locf(.SD, na.rm = FALSE, fromLast = FALSE, maxgap = Inf), by = "gvkey"]

给予:

代码语言:javascript
复制
    gvkey   date dlcq dlttq
1: gvkey1  date1   10    20
2: gvkey1  date2   10    20
3: gvkey1  date3   10    10
4: gvkey2 date10   NA    NA
5: gvkey2 date11   10    NA
6: gvkey2 date12   10    NA

备注

代码语言:javascript
复制
Lines <- "
date | gvkey | dlcq | dlttq
date1 | gvkey1 | 10 | 20
date2 | gvkey1 | NA | NA 
date3 | gvkey1 | NA | 10 
date10 | gvkey2 | NA | NA 
date11 | gvkey2 | 10 | NA 
date12 | gvkey2 | NA | NA"


library(data.table)
test3 <- fread(Lines)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56344520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档