【发布时间】:2015-09-04 22:25:09
【问题描述】:
我有一个带有两个奇数变量的数据框。对于一个变量,每个单元格存储一个列表,其内容只是两个数字的向量。对于另一个变量,每个单元格存储一个包含 8 个数字的三维数组(即使只需要二维)。
我想通过将奇数变量分解为单独的变量来简化数据集。我想出了如何使用 for 循环分解所有数据,但这非常慢。我知道 apply 通常应该更快,但我不知道如何将其翻译为 apply。有可能吗,或者有更好的方法吗?
for (i in 1:nrow(df)){
if (length(df$coordinates.coordinates[[i]]>0)){
df[i,"coordinates.lon"]<- df$coordinates.coordinates[[i]][1]
df[i,"coordinates.lat"]<- df$coordinates.coordinates[[i]][2]
}
if (length(df$place.bounding_box.coordinates[[i]]>0)){
df[i,"place.bounding_box.a.lon"] <-df$place.bounding_box.coordinates[[i]][1,1,1]
df[i,"place.bounding_box.b.lon"] <-df$place.bounding_box.coordinates[[i]][1,2,1]
df[i,"place.bounding_box.c.lon"] <-df$place.bounding_box.coordinates[[i]][1,3,1]
df[i,"place.bounding_box.d.lon"] <-df$place.bounding_box.coordinates[[i]][1,4,1]
df[i,"place.bounding_box.a.lat"] <-df$place.bounding_box.coordinates[[i]][1,1,2]
df[i,"place.bounding_box.b.lat"] <-df$place.bounding_box.coordinates[[i]][1,2,2]
df[i,"place.bounding_box.c.lat"] <-df$place.bounding_box.coordinates[[i]][1,3,2]
df[i,"place.bounding_box.d.lat"] <-df$place.bounding_box.coordinates[[i]][1,4,2]
}
}
编辑 这是一个带有一个案例的示例数据框(通过 dput)
structure(list(coordinates.coordinates = list(c(112.088477, -7.227974
)), place.bounding_box.coordinates = list(structure(c(112.044456,
112.044456, 112.143242, 112.143242, -7.263067, -7.134563, -7.134563,
-7.263067), .Dim = c(1L, 4L, 2L)))), .Names = c("coordinates.coordinates",
"place.bounding_box.coordinates"), class = c("tbl_df", "data.frame"
), row.names = c(NA, -1L))
如果有帮助,这是当您尝试使用 jsonlite 的 stream_in 函数(使用 flatten=TRUE)读取 Twitter 流数据时得到的数据格式
【问题讨论】:
-
您能提供示例数据吗?