代表性的样本数据的列表中提取数据(名单列表):从列表到自己的`data.frame`与`purrr`
l <- list(structure(list(a = -1.54676469632688, b = "s", c = "T",
d = structure(list(id = 5L, label = "Utah", link = "Asia/Anadyr",
score = -0.21104594634643), .Names = c("id", "label",
"link", "score")), e = 49.1279871269422), .Names = c("a",
"b", "c", "d", "e")), structure(list(a = -0.934821052832427,
b = "k", c = "T", d = list(structure(list(id = 8L, label = "South Carolina",
link = "Pacific/Wallis", score = 0.526540892113734, externalId = -6.74354377676955), .Names = c("id",
"label", "link", "score", "externalId")), structure(list(
id = 9L, label = "Nebraska", link = "America/Scoresbysund",
score = 0.250895465294041, externalId = 16.4257470807879), .Names = c("id",
"label", "link", "score", "externalId"))), e = 52.3161400117052), .Names = c("a",
"b", "c", "d", "e")), structure(list(a = -0.27261485993069, b = "f",
c = "P", d = list(structure(list(id = 8L, label = "Georgia",
link = "America/Nome", score = 0.526494135483816, externalId = 7.91583574935589), .Names = c("id",
"label", "link", "score", "externalId")), structure(list(
id = 2L, label = "Washington", link = "America/Shiprock",
score = -0.555186440792989, externalId = 15.0686663219837), .Names = c("id",
"label", "link", "score", "externalId")), structure(list(
id = 6L, label = "North Dakota", link = "Universal",
score = 1.03168296038975), .Names = c("id", "label",
"link", "score")), structure(list(id = 1L, label = "New Hampshire",
link = "America/Cordoba", score = 1.21582056168681, externalId = 9.7276418869132), .Names = c("id",
"label", "link", "score", "externalId")), structure(list(
id = 1L, label = "Alaska", link = "Asia/Istanbul", score = -0.23183264861979), .Names = c("id",
"label", "link", "score")), structure(list(id = 4L, label = "Pennsylvania",
link = "Africa/Dar_es_Salaam", score = 0.590245339334121), .Names = c("id",
"label", "link", "score"))), e = 132.1153538536), .Names = c("a",
"b", "c", "d", "e")), structure(list(a = 0.202685974077313, b = "x",
c = "O", d = structure(list(id = 3L, label = "Delaware",
link = "Asia/Samarkand", score = 0.695577130634724, externalId = 15.2364820698193), .Names = c("id",
"label", "link", "score", "externalId")), e = 97.9908914452971), .Names = c("a",
"b", "c", "d", "e")), structure(list(a = -0.396243444741009,
b = "z", c = "P", d = list(structure(list(id = 4L, label = "North Dakota",
link = "America/Tortola", score = 1.03060272795705, externalId = -7.21666936522344), .Names = c("id",
"label", "link", "score", "externalId")), structure(list(
id = 9L, label = "Nebraska", link = "America/Ojinaga",
score = -1.11397997280413, externalId = -8.45145052697411), .Names = c("id",
"label", "link", "score", "externalId"))), e = 123.597945533926), .Names = c("a",
"b", "c", "d", "e")))
我有一个列表的列表,凭借JSON的数据下载。
该列表有176个元素,每个元素有33个嵌套元素,其中一些元素也是不同长度的列表。
我有兴趣分析包含在特定嵌套列表中的数据,每个176有4个或5个元素,其中一些有4个,有些有5个。提取这个嵌套的兴趣列表并将其转换为data.frame
以便能够执行一些分析。
在上面的代表性示例数据中,我对l
的5个元素中的每个元素的嵌套列表d
感兴趣。因此,期望data.frame
看起来是这样的:
id label link score externalId
5 Utah Asia/Anadyr -0.2110459 NA
8 South Carolina Pacific/Wallis 0.5265409 -6.743544
.
.
我一直在尝试使用purrr
这似乎对列表中的处理数据的合理和稳定的流量,但我遇到了错误,我不能完全了解原因 - 很可能是因为我没有正确理解purrr
或列表(可能两者)的命令/逻辑。这是我已经尝试的代码,但将引发相关的误差:
df <- map_df(l, "d", ~as.data.frame(.))
Error: incompatible sizes (5 != 4)
相信这具有的d
每个组件的不同的长度,或者做不同的包含的数据(有时4个元素有时5 )或者我在这里使用的函数是错误指定的 - 实际上我不完全确定。
我已经通过使用for循环来解决这个问题,我知道这是低效的,因此我的问题在这里。
这是for循环我目前使用:
df <- data.frame(id = integer(), label = character(), score = numeric(), externalId = numeric())
for(i in seq_along(l)){
df_temp <- l[[i]][[4]] %>% map_df(~as.data.frame(.))
df <- rbind(df, df_temp)
}
一些援助最好用purrr
- 或者一些版本的apply
,因为这仍然是优于我的for循环 - 将不胜感激。此外,如果有上述资源我想了解,而不是找到正确的代码。