删除data.table中的最后NA值

时间:2015-10-22 07:28:40

标签: r data.table na

我在data.tables上运行预测,有时候尾部有NA值。这些值尚不可用,可以删除。如何在系列结尾处删除NA值?

        var image = new ol.style.Circle({
          radius: 5,
          fill: null,
          stroke: new ol.style.Stroke({color: 'red', width: 1})
        });

        var styles = {
          'Point': [new ol.style.Style({
            image: image
          })]};

        var styleFunction = function(feature, resolution) {
          return styles[feature.getGeometry().getType()];

        };  

        var CITYClusterSource = new ol.source.Cluster({
                source: new ol.source.Vector({
               url: 'world_cities.json',
                format: new ol.format.GeoJSON(),
                projection: 'EPSG:3857'
            }),
        })
        var CITYClusterLayer = new ol.layer.Vector({
            source: CITYClusterSource,
            style: styleFunction

        });

        setTimeout(function () { CITYClusterSource.clear(); }, 5000);

        var map = new ol.Map({
            target: 'map',
            renderer: 'canvas',
              layers: [
                new ol.layer.Tile({
                  source: new ol.source.OSM(),
                }),
                CITYClusterLayer
            ],
            view: new ol.View({
                center: ol.proj.transform([15.0, 45.0], 'EPSG:4326', 'EPSG:3857'),
                zoom:3
            })
        });

1 个答案:

答案 0 :(得分:1)

找到最后一个非NA并保持一切:

DT[ seq( max(which(!is.na(v))) ) ]

同样,你可以反过来使用which.max

DT[ seq( .N-which.max(rev(!is.na(v)))+1L ) ]

如果最后没有NA丢弃,则两个选项都可以正常工作。

如果v完全NA

,他们的行为会有所不同
  • max(which(!is.na(v)))-Inf,因为which会返回一个空值。
    这会导致seq抛出错误。

  • which.max(rev(!is.na(v))将返回1,因为FALSE是在位置1中找到的最大值。
    这意味着返回所有行。

如果你想要那种情况下的其他行为(比如不返回任何行),那么解决它应该很简单。