用NA替换整数(0)

use*_*193 5 integer r transformation

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

45
64
integer(0)
78
Run Code Online (Sandbox Code Playgroud)

我如何检测这些integer(0)并替换它们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))
Run Code Online (Sandbox Code Playgroud)

此输出sapply是问题的根源.

> str(sapply(df1$ID,function(x) fetcher(x)))
List of 6
$ : num 33
$ : num 11
$ : num(0) 
$ : num 22
$ : num 55
$ : num 44
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ein 6

这是(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
Run Code Online (Sandbox Code Playgroud)