2017-12-03 2 views
2

Ich habe df wie diese, wie Listen in Listen einzufügen r mit

  df = data.frame(
      name = c('leo','brad','musk','mark'), 
      vehicle = c(2,3,3,3), 
      car = c(1,1,0,0), 
      bike = c(1,0,1,1), 
      bicycle = c(0,1,1,1), 
      lorry = c(0,1,1,0)) 

df

name  vehicle  car  bike bicycle  lorry 
leo   2   1  1  0   0 
musk   3   1  0  1   1 
mark   3   0  1  1   1 
uma   3   0  1  1   0 

, wenn ich die oben einfügen sieht df MongoDB R verwenden, die JSON-Code wie folgt aussieht

  { 
      "name" : 'leo', 
      "vehicle" : 2, 
      "car" : 1, 
      "bike" : 1, 
      "bicycle" : 1, 
      "lorry" : 0 
     } 

aber ich will es so sein (wie die Liste in der Liste)

 { 
     "name" : 'leo', 
     "vehicle" : 2, 
     "Total Vehicles": [ 
      {"car" : 1}, 
      {"bike" : 1}, 
      {"bicycle" : 0}, 
      {"lorry" : 0} 
      ] 

    } 

in r, ich habe versucht,

cee = df[,c(1,2)] 
com = list(df[,-c(1,2)]) 
see = append(cee, com) 

sea = list(var = df[,c(1,2)], comment = df[,-c(1,2)]) 

Wenn die Antwort bereits verfügbar ist. Bitte geben Sie mir den Link. danke

Antwort

0
 df1 = df[,c('name','vehicle')] 



     df1$Total_Vehicles = df[,c('car','bike','bicycle','lorry')] 



     > df1 
      name vehicle Total_Vehicles.car Total_Vehicles.bike 
     1 leo  2     1     1 
     2 brad  3     1     0 
     3 musk  3     0     1 
     4 uma  3     0     1 
      Total_Vehicles.bicycle Total_Vehicles.lorry 
     1      0     0 
     2      1     1 
     3      1     1 
     4      1     0 



     > str(df1) 
     'data.frame': 4 obs. of 3 variables: 
     $ name   : Factor w/ 4 levels "brad","leo","uma",..: 2 1 4 3 
     $ vehicle  : num 2 3 3 3 
     $ Total_Vehicles:'data.frame': 4 obs. of 4 variables: 
      ..$ car : num 1 1 0 0 
      ..$ bike : num 1 0 1 1 
      ..$ bicycle: num 0 1 1 1 
      ..$ lorry : num 0 1 1 0 

Und Daten, wenn sie in mongoDB JSON eingefügt wie folgt aussieht wie erforderlich:

{ 
     "_id" : ObjectId("5a4107ccff03e12bf800141c"), 
     "name" : "leo", 
     "vehicle" : 2.0, 
     "Total_Vehicles" : { 
      "car" : 1.0, 
      "bike" : 1.0, 
      "bicycle" : 0.0, 
      "lorry" : 0.0 
     } 
    }, 
    { 
     "_id" : ObjectId("5a4107ccff03e12bf800141d"), 
     "name" : "brad", 
     "vehicle" : 3.0, 
     "Total_Vehicles" : { 
      "car" : 1.0, 
      "bike" : 0.0, 
      "bicycle" : 1.0, 
      "lorry" : 1.0 
     } 
    }, 
    { 
     "_id" : ObjectId("5a4107ccff03e12bf800141e"), 
     "name" : "musk", 
     "vehicle" : 3.0, 
     "Total_Vehicles" : { 
      "car" : 0.0, 
      "bike" : 1.0, 
      "bicycle" : 1.0, 
      "lorry" : 1.0 
     } 
    }, 
    { 
     "_id" : ObjectId("5a4107ccff03e12bf800141f"), 
     "name" : "uma", 
     "vehicle" : 3.0, 
     "Total_Vehicles" : { 
      "car" : 0.0, 
      "bike" : 1.0, 
      "bicycle" : 1.0, 
      "lorry" : 0.0 
     } 
    } 
1

Vielleicht tidyr::nest() wird das Objekt wie gewünscht erstellen? es kann mit unnest()

df1

name vehicle car bike bicycle lorry 
1 leo  2 1 1  0  0 
2 musk  3 1 0  1  1 
3 mark  3 0 1  1  1 
4 uma  3 0 1  1  0 

df2

df2 <- df1 %>% 
    nest(car:lorry, .key = 'total_vehicles') 

Ergebnisse in ...

name vehicle total_vehicles 
1 leo  2  1, 1, 0, 0 
2 musk  3  1, 0, 1, 1 
3 mark  3  0, 1, 1, 1 
4 uma  3  0, 1, 1, 0 

rückgängig gemacht werden, wo total_vehicles eine Liste Spalte

str(df2) 

'data.frame': 4 obs. of 3 variables: 
$ name   : Factor w/ 4 levels "leo","mark","musk",..: 1 3 2 4 
$ vehicle  : int 2 3 3 3 
$ total_vehicles:List of 4 
    ..$ :'data.frame': 1 obs. of 4 variables: 
    .. ..$ car : int 1 
    .. ..$ bike : int 1 
    .. ..$ bicycle: int 0 
    .. ..$ lorry : int 0 
    ..$ :'data.frame': 1 obs. of 4 variables: 
    .. ..$ car : int 1 
    .. ..$ bike : int 0 
    .. ..$ bicycle: int 1 
    .. ..$ lorry : int 1 
    ..$ :'data.frame': 1 obs. of 4 variables: 
    .. ..$ car : int 0 
    .. ..$ bike : int 1 
    .. ..$ bicycle: int 1 
    .. ..$ lorry : int 1 
    ..$ :'data.frame': 1 obs. of 4 variables: 
    .. ..$ car : int 0 
    .. ..$ bike : int 1 
    .. ..$ bicycle: int 1 
    .. ..$ lorry : int 0 
+0

Ich denke du meinst 'tidyr :: Nest()' ('purrr :: nest' doesn‘ t existieren). Und Sie können '%>% jsonlite :: toJSON (pretty = T)' hinzufügen, um es in der gewünschten JSON anzuzeigen – SymbolixAU

+0

Hoppla, danke dafür – user127649