0

我正在使用 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。

4

1 回答 1

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"     
于 2014-08-05T15:40:09.870 回答