2017-01-19 5 views
1

私は現在Rの次の問題を抱えています: a =(a1、...、an)とb =(b1、... 、bn)、((a1、b1)、...、(an、bn))のようなリストのリストを取得したい。 背景情報:プレーンデータテーブル/フレームをネストされたjsonに変換する必要があります(例:jsonliteを使用)。R:タペルのリストに同じ長さのリストを結合する

:我々は必要な結果を得るためにlapply使用することができ、ここで

library(data.table) 
n<-5 
data<-data.table(id=1:n,lon=1:n,lat=1:n) 

:IDS、緯度と経度のデータテーブルを考えるのコード例として 、後者の二つはリストにまとめた場所と呼ばれるように

data$location<-lapply(1:nrow(data),function(x) list(data[x,c("lat","lon"),with=F])) 

また、分割(、小さな大きなデータセットのために遅いために速い):^ 5

data$location<-list(split(data[,c("lat","lon"),with=F],1:nrow(data))) 

小さな規模の両方の作業罰金が、nの>> 10それは私に年齢を取ります機械。より高速な計算のためのあらゆる解決策がありますか?

答えて

1

我々はlist列を抽出することができます「data.table」内の「ID」によりグループ分けした後listにData.tableのサブセットを配置し、デフォルトの新しい列「V1」

data[, location := list(list(.SD)), id] 

を抽出することができます

data$location 
#[[1]] 
# lon lat 
#1: 1 1 

#[[2]] 
# lon lat 
#1: 2 2 

#[[3]] 
# lon lat 
#1: 3 3 

#[[4]] 
# lon lat 
#1: 4 4 

#[[5]] 
# lon lat 
#1: 5 5 
0

あなたは別のオプションとしてdata.table::transposeを使用することができます。

data[, location := transpose(.(lon, lat))] 

data 
# id lon lat location 
#1: 1 1 1  1,1 
#2: 2 2 2  2,2 
#3: 3 3 3  3,3 
#4: 4 4 4  4,4 
#5: 5 5 5  5,5 

data$location  # this drops the column names, you can refer to the elements by index 
#[[1]] 
#[1] 1 1 

#[[2]] 
#[1] 2 2 

#[[3]] 
#[1] 3 3 

#[[4]] 
#[1] 4 4 

#[[5]] 
#[1] 5 5 
関連する問題