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

別のオプションは、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 に答える
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 に答える