我正在使用API从人口普查局获取数据。好消息是我能够检索数据。坏消息是我无法将其转换为可用于分析和映射的格式。
我的问题:当数据在列表中时,有没有办法修改API调用或处理缺失值的标准方法?
以下是我对实际数据的处理方式。下面是玩具示例,因为人口普查数据需要个人API令牌。
# Pull data from Census Bureau
mydata<-fromJSON(file=url(paste("http://api.census.gov/data/2010/acs5?key=", token,"&get=B25077_001E&for=block+group:*&in=state:47+county:037", sep = "")))
# create a data frame
mydata.df<-ldply(mydata)
# rename columns
names(mydata.df)<-ldply(mydata)[1,]
这是我的一些数据。我已经尝试了mydata [mydata == NULL] = 9999,但它没有帮助。
list(c("94400", "47", "037", "019200", "4"), c("350000", "47", "037", "019300", "1"), list(NULL, "47", "037", "019300", "2"), list(NULL, "47", "037", "019300", "3"), c("198200", "47", "037", "019400", "1"), c("176900", "47", "037", "019400", "2"), c("250000", "47", "037", "019400", "3"), c("166200", "47", "037", "019500", "1"), c("227200", "47", "037", "019500", "2"), c("210500", "47", "037", "019500", "3"), c("187500", "47", "037", "019500", "4"), c("140000", "47", "037", "019600", "1"), c("131300", "47", "037", "019600", "2"), list(NULL, "47", "037", "980100", "1"), list(NULL, "47", "037", "980200", "1"))
这就是我知道缺少值的方法;有些有5个值,有些有4个。
unlist(lapply(mydata, function(x) length(unlist(x))))
如果这不是fromJSON()的问题,这里有一个例子,说明我在R中的数据要做的事情。
mylist = list(a = c(1:4), b = c(1:3), c = c(1:4), d = )
给出这个:
$a
[1] 1 2 3 4
$b
[1] 1 2 3
$c
[1] 1 2 3 4
但我想这样:
$a
[1] 1 2 3 4
$b
[1] 1 2 3 NA
$c
[1] 1 2 3 4
或类似的地方,NA充当缺失值的占位符。例如,如果缺少2,则列表中的条目将类似于1 NA 3 4。
答案 0 :(得分:0)
mylist = list(a = 1:4, b = 1:3, c = c(1,3,4))
Un <- unique(unlist(mylist))
lapply(mylist, function(x) x[match(Un,x)])
# $a
# [1] 1 2 3 4
# $b
# [1] 1 2 3 NA
# $c
#[1] 1 NA 3 4
使用dput()
数据
lst1 <- lapply(mylist, function(x) do.call(c,lapply(x,
function(y) {y[is.null(y)] <- NA;y})))
head(lst1,3)
#[[1]]
#[1] "94400" "47" "037" "019200" "4"
#[[2]]
#[1] "350000" "47" "037" "019300" "1"
#[[3]]
#[1] NA "47" "037" "019300" "2"