gpt4 book ai didi

R:按组在 data.table 列中找到第一个非 NA 观察

转载 作者:行者123 更新时间:2023-12-04 23:40:56 26 4
gpt4 key购买 nike

我有一个 data.table有许多缺失值,我想要一个变量,它为每组中的第一个非缺失值提供 1。

假设我有这样一个 data.table:

library(data.table)
DT <- data.table(iris)[,.(Petal.Width,Species)]
DT[c(1:10,15,45:50,51:70,101:134),Petal.Width:=NA]

现在在开头,结尾和中间都有缺失。我试过两个版本,一个是:
DT[min(which(!is.na(Petal.Width))),first_available:=1,by=Species]

但它只找到全局最小值(在这种情况下,setosa 得到正确的 1),而不是分组的最小值。我认为这是因为 data.table第一个子集按 i,然后按组排序,对吗?所以它只适用于全局最小值 which(!is.na(Petal.Width)) 的行。这是第一个非 NA 值。

对 j 中的测试进行第二次尝试:
DT[,first_available:= ifelse(min(which(!is.na(Petal.Width))),1,0),by=Species]

它只返回一列 1。在这里,我没有很好的解释为什么它不起作用。

我的目标是:
DT[,first_available:=0]
DT[c(11,71,135),first_available:=1]

但实际上我有数百个组。任何帮助,将不胜感激!

编辑: this问题确实接近,但不是针对 NA 的,如果我理解正确,也不能解决这里的问题。我试过:
DT <- data.table(DT, key = c('Species'))
DT[unique(DT[,key(DT), with = FALSE]), mult = 'first']

最佳答案

这是一种方法:

DT[!is.na(Petal.Width), first := as.integer(seq_len(.N) == 1L), by = Species]

关于R:按组在 data.table 列中找到第一个非 NA 观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723943/

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