我有一个我想用JSON分组的数据集。
address city.x state.x latitude.x longitude.x
1 5601 W. Slauson Ave. #200 Culver City CA 33.99718 -118.40145
2 PO 163005 Austin TX 30.31622 -97.85877
3 10215 W. Jamesburg Street Wichita KS 37.70063 -97.43430
4 14556 Newport Ave Tustin CA 33.74165 -117.82127
5 2496 Falcon Crescent Virginia Beach VA 36.83840 -76.02862
6 1306 Wilshire Boulevard Santa Monica CA 34.03216 -118.49022
我想将地址和纬度/长度组合在一起并将其全部归入公司类别。
我希望它看起来像这样:
{company: {address: {address: "5601 W. Slauson Ave. #200" ,
city.x: "Culver City" ,
state.x: "CA"}},
{geo: {latitude: "33.99718",
longitude: "-118.40145"}}},
{company: {address: {address: "PO 163005" ,
city.x: "Austin" ,
state.x: "TX"}},
{geo: {latitude: "30.31622",
longitude: "-97.85877"}}},
structure(list(address = c("5601 W. Slauson Ave. #200", "PO 163005",
"10215 W. Jamesburg Street", "14556 Newport Ave", "2496 Falcon Crescent",
"1306 Wilshire Boulevard"), city.x = c("Culver City", "Austin",
"Wichita", "Tustin", "Virginia Beach", "Santa Monica"), state.x = c("CA",
"TX", "KS", "CA", "VA", "CA"), latitude.x = c(33.997179, 30.316223,
37.700632, 33.741651, 36.838398, 34.032159), longitude.x = c(-118.40145,
-97.85877, -97.4343, -117.82127, -76.02862, -118.49022)), .Names = c("address",
"city.x", "state.x", "latitude.x", "longitude.x"), class = "data.frame", row.names = c(NA,
6L))
任何帮助将不胜感激!
答案 0 :(得分:0)
以下代码应输出您想要的内容:
for (i in 1:nrow(df)){
cat ("{company:{address:{adress:\t\"",df$address[i],
"\",\n\t\tcity.x:\t\"", df$city.x[i],
"\",\n\t\tstate.x:\t \"", df$state.x[i],
"\"}}\n\t {geo:{\tlatitude: \"", df$latitude[i],
"\",\n\t\tlongitude: \"", df$longitude[i],
"\"}}},\n", sep="")
}
以df
作为您的数据框。
答案 1 :(得分:0)
另一种选择是使用rjson
包。
require(rjson)
# This is necessary to avoid duplication of labels in the JSON output
names(df) <- NULL
reshaped <- apply(df, 1, FUN=function(x){list(address=list(
address = x[1],
city = x[2],
state = x[3]),
coords=list(
latitude = x[4],
longitude = x[5]))})
result <- toJSON(reshaped)
与您要求的唯一区别在于,它不是以“公司”为根,而是具有序号。您可以通过更改数据的行名称来更改它(使用rownames
),但R不支持重复的行名...我得到的最接近的是
rownames(df) <- paste("company", 1:nrow(df), collapse="")
并且可能使用一点regexp魔法你可以删除输出字符串中的数字......