gpt4 book ai didi

r - 使用 "FUN=first"跳过 NA 值

转载 作者:行者123 更新时间:2023-12-02 17:53:41 26 4
gpt4 key购买 nike

对于我做错了什么,可能确实有一个简单的解释,但今天我已经为此工作了很长一段时间,但我仍然无法让它发挥作用。我以为这就像在公园散步一样,但是,我的代码并没有按预期工作。

对于这个例子,假设我有一个如下的数据框。

df
Row# user columnB
1 1 NA
2 1 NA
3 1 NA
4 1 31
5 2 NA
6 2 NA
7 2 15
8 3 18
9 3 16
10 3 NA

基本上,我想创建一个新列,使用第一个(以及最后一个)函数(在 TTR 库包内)来获取每个用户的第一个非 NA 值。所以我想要的数据框是这样的。

df
Row# user columnB firstValue
1 1 NA 31
2 1 NA 31
3 1 NA 31
4 1 31 31
5 2 NA 15
6 2 NA 15
7 2 15 15
8 3 18 18
9 3 16 18
10 3 NA 18

我主要使用谷歌环顾四周,但我找不到确切的答案。

这是我尝试过的一些代码,但我没有得到我想要的结果(注意,我是从内存中得出的,所以还有很多其他的变体,但这些是我一直在尝试的一般形式)。

    df$firstValue<-ave(df$columnB,df$user,FUN=first,na.rm=True)
df$firstValue<-ave(df$columnB,df$user,FUN=function(x){x,first,na.rm=True})
df$firstValue<-ave(df$columnB,df$user,FUN=function(x){first(x,na.rm=True)})
df$firstValue<-by(df,df$user,FUN=function(x){x,first,na.rm=True})

失败,这些仅给出每个组的第一个值,即 NA。

再说一遍,这些只是我脑海中的几个例子,我使用 na.rm,使用 na.exclude、na.omit、na.action(na.omit) 等......

任何帮助将不胜感激。谢谢。

最佳答案

data.table 解决方案

require(data.table)
DT <- data.table(df, key="user")
DT[, firstValue := na.omit(columnB)[1], by=user]

关于r - 使用 "FUN=first"跳过 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070213/

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