gpt4 book ai didi

用 NA 替换 integer(0)

转载 作者:行者123 更新时间:2023-12-04 10:49:26 27 4
gpt4 key购买 nike

我有一个函数可以应用于一列并将结果放在另一列中,它有时会给我 integer(0)作为输出。所以我的输出列将是这样的:

45
64
integer(0)
78

我如何检测这些 integer(0) 's 并将它们替换为 NA ?有没有类似 is.na()那会检测到它们吗?

编辑:好的,我想我有一个可重复的例子:
df1 <-data.frame(c("267119002","257051033",NA,"267098003","267099020","267047006"))
names(df1)[1]<-"ID"

df2 <-data.frame(c("257051033","267098003","267119002","267047006","267099020"))
names(df2)[1]<-"ID"
df2$vals <-c(11,22,33,44,55)

fetcher <-function(x){
y <- df2$vals[which(match(df2$ID,x)==TRUE)]
return(y)
}

sapply(df1$ID,function(x) fetcher(x))

sapply 的输出是问题的根源。
> str(sapply(df1$ID,function(x) fetcher(x)))
List of 6
$ : num 33
$ : num 11
$ : num(0)
$ : num 22
$ : num 55
$ : num 44

我不希望这是一个列表 - 我想要一个向量,而不是 num(0)我要 NA (注意在这个玩具数据中它给出了 num(0) - 在我的真实数据中它给出了 (integer(0) )。

最佳答案

这是 (a) 替换 integer(0) 的方法与 NA (b) 将列表转换为向量。

# a regular data frame
> dat <- data.frame(x = 1:4)
# add a list including integer(0) as a column
> dat$col <- list(45,
+ 64,
+ integer(0),
+ 78)
> str(dat)
'data.frame': 4 obs. of 2 variables:
$ x : int 1 2 3 4
$ col:List of 4
..$ : num 45
..$ : num 64
..$ : int
..$ : num 78
# find zero-length values
> idx <- !(sapply(dat$col, length))
# replace these values with NA
> dat$col[idx] <- NA
# transform list to vector
> dat$col <- unlist(dat$col)
# now the data frame contains vector columns only
> str(dat)
'data.frame': 4 obs. of 2 variables:
$ x : int 1 2 3 4
$ col: num 45 64 NA 78

关于用 NA 替换 integer(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21218041/

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