2017-02-17 4 views
-1

私は4列のデータフレームを持っています。データフレーム内の行をリンクする

m <-c(1,2,3,4) 
e <-c('01/01/1970', '02/01/1981','03/05/1986','01/01/1970') 
z <-c(111,123, 151, 111) 
l <-c('XAR', 'XAR', 'XUI','XUI') 
q <-c(673, 673, 304, 455) 
df <- data.frame(m,e,z,l,q) 

行間の関係を記述する新しいdfを作成する必要があります。
関係行が例えば4つのフィールド

のうちのいずれか2内の他の行と一致する場合があります:

data frame view

この場合、得られたDFがあろう:

enter image description here

私の生産データには70万行があります。私はSQLを使ってこれを解決しようとしましたが、関数の再帰的性質は生産目的には遅すぎます。

R/Rパッケージにこのような実用性を持たせるためのグラフ機能があるかどうかは疑問でした。

+2

ご期待Oは何utput?おそらく 'igraph'をチェックしてください – akrun

+0

リンクを記述するオブジェクトのようなものがあります。これはリンクされているmとmを含む2つの列を持つ単純なデータフレームです。 – Leehbi

答えて

1

どのような出力が期待されているかは完全にはっきりしません。いずれの場合においても

data.tableは、共通の価値観を持つ行を識別するために、それは簡単かつ高速になり:

library(data.table) 

# convert your data frame into data table 
    setDT(df) 

# create common id for rows with same values in 'e' AND 'z' 
    df[, id_ez :=.GRP, by=.(e,z)] 

# create common id for rows with same values in 'l' AND 'q' 
    df[, id_lq :=.GRP, by=.(l,q)] 


> head(df) 
> m   e z l q id_ez id_lq 
> 1: 1 01/01/1970 111 XAR 673  1  1 
> 2: 2 02/01/1981 123 XAR 673  2  1 
> 3: 3 03/05/1986 151 XUI 304  3  2 
> 4: 4 01/01/1970 111 XUI 455  1  3 

今、あなたは「M」は、それぞれのid

に好かれているかを示します2列の出力を得ることができます
df[, .(m_linked=paste(m)), by=id_ez] 

> id_ez m_linked 
> 1:  1  1 
> 2:  1  4 
> 3:  2  2 
> 4:  3  3 

あなたはベクトルのリストには、このテーブルをオンにする場合:

mysplit = split(a$V1, a$id_ez) 
myresult = lapply(mysplit, as.character) 

> myresult 
$`1` 
[1] "1" "4" 

$`2` 
[1] "2" 

$`3` 
[1] "3" 
+0

フィールドのうちの2つが一致すると一致が発生します。つまり、EZ、EL、EQ、ZE、ZL、ZQなどがあります。 – Leehbi

+0

hummm少なくとも2つの値が同じ値の行を識別したいので、 4列の可能なすべてのペアで...私は部分的な応答として私の答えを残しておきますが、あなたはこの点をより明確にする必要があり、誰かが解決策を考えてくれることを望みましょう。 –

+0

フィードバックいただきありがとうございます。私は質問を編集しました。 – Leehbi

関連する問題