gpt4 book ai didi

r - 如何根据列中的值从数据表中删除列

转载 作者:行者123 更新时间:2023-12-04 11:44:53 26 4
gpt4 key购买 nike

背景

我有一些财务数据(1.5 年 SP500 股票),我使用 data.table 包将它们处理成宽格式。在学习了 Datacamp 上的整个 data.table 类(class)之后,我开始掌握基础知识,但是在搜索了几个小时之后,我对如何做到这一点感到茫然。

问题

数据包含包含每只股票的财务数据的列。我需要删除包含两个连续 NA 的列。

我的猜测是我必须使用 rle() , lapply() , 查找连续值和 DT[,x:= NULL] ) 删除列。

我读到了 rle()不适用于 NA,所以我将它们改为 Inf。
我只是不知道如何组合这些功能,以便我可以有效地删除我拥有的 460 中的几列。

使用 data.table 的答案会很棒,但任何运作良好的东西都非常感谢。

或者,我很想知道如何删除包含至少 1 NA 的列

示例数据

> test[1:5,1:5,with=FALSE]
date 10104 10107 10138 10145
1: 2012-07-02 0.003199 Inf 0.001112 -0.012178
2: 2012-07-03 0.005873 0.006545 0.001428 Inf
3: 2012-07-05 Inf -0.001951 -0.011090 Inf
4: 2012-07-06 Inf -0.016775 -0.009612 Inf
5: 2012-07-09 -0.002742 -0.006129 -0.001294 0.005830
> dim(test)
[1] 377 461

期望的结果
         date     10107     10138
1: 2012-07-02 Inf 0.001112
2: 2012-07-03 0.006545 0.001428
3: 2012-07-05 -0.001951 -0.011090
4: 2012-07-06 -0.016775 -0.009612
5: 2012-07-09 -0.006129 -0.001294

附注。这是我的第一个问题,我已尝试遵守规则,如果我需要更改任何内容,请告诉我。

最佳答案

这是一个 rle版本:

dt[, sapply(dt, function(x)
setDT(rle(is.na(x)))[, sum(lengths > 1 & values) == 0]), with = F]

或者更换 is.nais.infinite如果你喜欢。

关于r - 如何根据列中的值从数据表中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com