2017-06-04 1 views
2

データフレームをループし、特定の変数のすべての組み合わせ(繰り返しなし)を取得することに興味があります。Rは1列内の行を結合するために入れ子になっています

これをリストに格納し、後で新しいデータフレームに列として追加することができます。 私はRを使ってこれを達成したいと思いますが、Pythonもうまくいくでしょう。

私の現在のデータ:N-1 = 9 及び9 + 8ので

idx  A   B  C 
    1  name1 val_x1 val_y1 
    2  name2 val_x2 val_y2 
    3  name3 val_x3 val_y3 
    ... 
    10 name10 val_x10 val_y10 

... + 1 = 45 私の所望のデータがリストとして、次のようになります。

c("name1_name2","name1_name3","name1_name4",...,"name9_name10") 

以降のデータフレームのように:私は、ネストされたと、目的のデータのうち、リストを作るために考え

idy  D 
    1 name1_name2 
    2 name1_name3 
    3 name1_name4 
    ... 
    45 name9_name10 

forループは、私はおそらく何か(複数のもの?)間違っているように動作しません。

i <- 1 
    j <- 2 
    k <- 1 
    new_list <- c() 

    while (k < 45) 
     while (i < 11){ 
      while (j < 10){ 
       new_list[[k]] <- paste(df$A[i], df$A[j], sep="_") 
       j <- j + 1 
       k <- k + 1 
      } 
      i <- i + 1 
     } 

これは、すべてのヒントは歓迎されているように、これは動作しません。

PS。私は、あなたの忍耐に感謝比較的新しいです:)

答えて

1

我々はexpand.grid

do.call(paste, c(subset(expand.grid(rep(list(df1$A), 2)), Var1 != Var2), sep="_")) 

それともcombn

D <- combn(df1$A, 2, FUN = paste, collapse="_") 
res <- data.frame(idy = seq_along(D), D, stringsAsFactors=FALSE) 
dim(res) 
#[1] 45 2 

res 
# idy   D 
#1 1 name1_name2 
#2 2 name1_name3 
#3 3 name1_name4 
#4 4 name1_name5 
#5 5 name1_name6 
#6 6 name1_name7 
#7 7 name1_name8 
#8 8 name1_name9 
#9 9 name1_name10 
#10 10 name2_name3 
#11 11 name2_name4 
#12 12 name2_name5 
#13 13 name2_name6 
#14 14 name2_name7 
#15 15 name2_name8 
#16 16 name2_name9 
#17 17 name2_name10 
#18 18 name3_name4 
#19 19 name3_name5 
#20 20 name3_name6 
#21 21 name3_name7 
#22 22 name3_name8 
#23 23 name3_name9 
#24 24 name3_name10 
#25 25 name4_name5 
#26 26 name4_name6 
#27 27 name4_name7 
#28 28 name4_name8 
#29 29 name4_name9 
#30 30 name4_name10 
#31 31 name5_name6 
#32 32 name5_name7 
#33 33 name5_name8 
#34 34 name5_name9 
#35 35 name5_name10 
#36 36 name6_name7 
#37 37 name6_name8 
#38 38 name6_name9 
#39 39 name6_name10 
#40 40 name7_name8 
#41 41 name7_name9 
#42 42 name7_name10 
#43 43 name8_name9 
#44 44 name8_name10 
#45 45 name9_name10 
+0

多くのおかげでを使用することができます! 最初の行の後に奇妙なエラーが発生したようです: > D < - combn(df1 $ A、2、FUN = paste、collapse = "_") "クラスのエラー - クラス(x0 ): "factor"を無効なオブジェクトに追加する " –

+0

@Frank_C「A」列を「文字」としました。 'D < - combn(as.character(df1 $ A)、2、FUN = paste、collapse =" _ ")' – akrun

+1

を試してみてください。 –

関連する問題