2017-01-04 13 views
2

データテーブル内の開始ベクトルからエンドベクトルまでのすべての整数リストを持つ列を作成したいと考えています。seqをベクトル化する

seqベクターワイズを使用する方法はありますか?ような何か:

library(data.table) 
Startpoints <- seq(1,11,5) 
Endpoints <- seq(5,15,5) 
DT <- data.table(Startpoints, Endpoints) 
DT[, sequences := seq(Startpoints, Endpoints, 1)] 

idealy(これまでのところ、リストラップアップを考慮しない)私にDT内でそのような列を与えるだろう:

sequences 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 

は、より一般的に尋ねた:私は簡単には存在しないと仮定関数をベクトル化したバージョンに変換する方法は? (ベクトル)変数が1つの行からの単一の値を表すときと、関数の引数として使用されたときにその完全なベクトルを表すときは、まだ完全に理解していません。

答えて

3

あなたは、単にMapを使用することができます。

DT[,sequences := Map(":", Startpoints, Endpoints)] 
# Startpoints Endpoints  sequences 
#1:   1   5  1,2,3,4,5 
#2:   6  10 6, 7, 8, 9,10 
#3:   11  15 11,12,13,14,15 

あなたが複数のベクトルの対応する要素に関数を適用しようとしている、またはあなたのケースの列にしているとき、それは便利です。ありがとう@Frank

1
DT[, .(seq = paste0(Startpoints:Endpoints, collapse = ",")), 
     by = c("Startpoints", "Endpoints")] 
# Startpoints Endpoints   seq 
#1:   1   5  1,2,3,4,5 
#2:   6  10  6,7,8,9,10 
#3:   11  15 11,12,13,14,15 

library(dplyr) 
DT %>% group_by(Startpoints, Endpoints) %>% mutate(seq = paste0(Startpoints:Endpoints, collapse = ",")) 

# Startpoints Endpoints   seq 
#1   1   5  1,2,3,4,5 
#2   6  10  6,7,8,9,10 
#3   11  15 11,12,13,14,15 
+1

...私はこの機能を知りませんでした。私は今、 'toString()'で走っていますし、ええ、同じです –

関連する問題