【发布时间】:2014-02-08 16:20:17
【问题描述】:
我有一个函数应用于一列并将结果放在另一列中,它有时会给我integer(0) 作为输出。所以我的输出列会是这样的:
45
64
integer(0)
78
如何检测这些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))
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) - 在我的真实数据中它给出了@987654333 @)。
【问题讨论】:
-
将 data.frame$column[data.frame$column == integer(0) ]
-
@pepsimax 你为什么不把它作为答案(也许提供一个工作示例)?
-
数据框不能包含
integer(0)。请提供一个可重现的例子。 -
或者您可以查看
length()==0参见:stackoverflow.com/questions/6451152/how-to-catch-integer0 -
我也很想知道
integer(0)是如何进入你的输出的。但要让你继续:要测试一个对象是否是integer(0),你可以做identical(object, integer(0))。
标签: r integer transformation