我经常遇到这样的结构数据:
employees <- list(
list(id = 1,
dept = "IT",
age = 29,
sportsteam = "softball"),
list(id = 2,
dept = "IT",
age = 30,
sportsteam = NULL),
list(id = 3,
dept = "IT",
age = 29,
sportsteam = "hockey"),
list(id = 4,
dept = NULL,
age = 29,
sportsteam = "softball"))
Run Code Online (Sandbox Code Playgroud)
在许多情况下,此类列表可能长达数千万个项目,因此内存问题和效率始终是一个问题.
我想将列表转换为数据帧,但如果我运行:
library(data.table)
employee.df <- rbindlist(employees)
Run Code Online (Sandbox Code Playgroud)
由于NULL值,我得到错误.我的正常策略是使用如下函数:
nullToNA <- function(x) {
x[sapply(x, is.null)] <- NA
return(x)
}
Run Code Online (Sandbox Code Playgroud)
然后:
employees <- lapply(employees, nullToNA)
employee.df <- rbindlist(employees)
Run Code Online (Sandbox Code Playgroud)
返回
id dept …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个将Null值变为NA的函数.我的一个专栏的摘要如下所示:
a b
12 210 468
Run Code Online (Sandbox Code Playgroud)
我想将12个空值更改为NA.我还有一些其他因素列,我想将Null值更改为NA,所以我从这里和那里借了一些东西来提出这个:
# change nulls to NAs
nullToNA <- function(df){
# split df into numeric & non-numeric functions
a<-df[,sapply(df, is.numeric), drop = FALSE]
b<-df[,sapply(df, Negate(is.numeric)), drop = FALSE]
# Change empty strings to NA
b<-b[lapply(b,function(x) levels(x) <- c(levels(x), NA) ),] # add NA level
b<-b[lapply(b,function(x) x[x=="",]<- NA),] # change Null to NA
# Put the columns back together
d<-cbind(a,b)
d[, names(df)]
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
Run Code Online (Sandbox Code Playgroud)> foo<-nullToNA(bar) Error in x[x == "", ] <- NA : incorrect …