1

我有一个数据集,我想用 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))

任何帮助,将不胜感激!

4

2 回答 2

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数据框。

于 2013-05-01T14:29:29.220 回答
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="")

也许用一点正则表达式魔法你可以去掉输出字符串中的数字......

于 2013-05-01T15:13:25.567 回答