मेरे पास दो डेटा टेबल x और y हैं जैसा कि नीचे दिखाया गया है:

x
Sample  code    code_conn   pool_content
Sample1   A1        X1      ASD
Sample1   A1        X3      POS
Sample1   B1        Y1      QAW
Sample1   B1        Y2      QWP
Sample1   B1        Y3      SDE
Sample1   B1        Y4      LKS
Sample1   C1        Z2      JMP
Sample1   C1        Z3      MSK
Sample2   A1        X1      ASD
Sample2   A1        X2      POS
Sample2   B1        Y1      QAW
Sample2   B1        Y2      QWP
Sample2   B1        Y3      LKS
Sample2   B1        Y4      ASE
Sample2   B1        Y5      ASM
Sample2   C1        Z1      MSK
Sample2   D1        P1      EAX
Sample2   D1        P2      EBX
Sample2   D1        P3      ECX
Sample2   D1        P4      EDX
Sample2   D1        P5      MOV
Sample2   D1        P6      ALL

y
code    code_conn
A1      X1
A1      X2
A1      X3
B1      Y1
B1      Y2
B1      Y3
B1      Y4
B1      Y5
C1      Z1
C1      Z2
C1      Z3
C1      Z4
D1      P1
D1      P2
D1      P3
D1      P4
D1      P5
D1      P6

मैं चाहता हूं कि आउटपुट निम्नानुसार हो:

Sample  code    code_conn   pool_content
Sample1 A1      X1          ASD
Sample1 A1      X2          …
Sample1 A1      X3          POS
Sample1 B1      Y1          QAW
Sample1 B1      Y2          QWP
Sample1 B1      Y3          SDE
Sample1 B1      Y4          LKS
Sample1 B1      Y5          …
Sample1 C1      Z2          JMP
Sample1 C1      Z3          MSK
Sample1 C1      Z1          …
Sample1 C1      Z4          …
Sample2 A1      X1          ASD
Sample2 A1      X2          POS
Sample2 A1      X3          …
Sample2 B1      Y1          QAW
Sample2 B1      Y2          QWP
Sample2 B1      Y3          LKS
Sample2 B1      Y4          ASE
Sample2 B1      Y5          ASM
Sample2 C1      Z1          MSK
Sample2 C1      Z2          …
Sample2 C1      Z3          …
Sample2 C1      Z4          …
Sample2 D1      P1          EAX
Sample2 D1      P2          EBX
Sample2 D1      P3          ECX
Sample2 D1      P4          EDX
Sample2 D1      P5          MOV
Sample2 D1      P6          ALL

तो, जो मैं मूल रूप से चाहता हूं, एक्स में प्रत्येक अद्वितीय नमूने के लिए, कोड के प्रत्येक समूह के लिए मैं तालिका x में तालिका y से सभी अनुपलब्ध कोड_कॉन और उनके पूल_कंटेंट को "..." पर सेट करना चाहता हूं। क्या ऐसा करने के लिए कोई स्मृति कुशल और तेज़ तरीका है। कोड और code_conn कोई भी स्ट्रिंग हो सकता है (विशेष रूप से अक्षरों और संख्याओं का एक सीरियल संयोजन नहीं)। मैंने नीचे डेटा उत्पन्न करने के लिए कोड संलग्न किया है। आपका बहुत बहुत धन्यवाद।

x <- data.table("Sample" = c(rep("Sample1", 8), rep("Sample2", 14)), 
           "code" = c("A1", "A1", "B1", "B1", "B1", "B1", "C1", "C1", "A1", "A1", rep("B1", 5), "C1", "C1", rep("D1", 5)), 
           "code_conn" = c("X1","X3","Y1","Y2","Y3","Y4","Z2","Z3","X1","X2","Y1","Y2","Y3","Y4","Y5","Z1","P1","P2","P3","P4","P5","P6"), 
           "pool_content" = c("ASD","POS","QAW","QWP","SDE","LKS","JMP","MSK","ASD","POS","QAW","QWP","LKS","ASE","ASM","MSK","EAX","EBX","ECX","EDX","MOV","ALL"))

y <- data.table("code" = c(rep("A1", 3), rep("B1", 5), rep("C1", 4), rep("D1", 6)), 
                "code_conn" = c("X1","X2","X3","Y1","Y2","Y3","Y4","Y5","Z1","Z2","Z3","Z4","P1","P2","P3","P4","P5","P6"))
0
Victor 28 जिंदा 2020, 09:27
merge(x, y, all = T) करना चाहिए। यह NAs डालेगा, जिसे आप ... से बदल सकते हैं या जो भी अन्य स्ट्रिंग आप चाहते हैं।
 – 
Gregor Thomas
28 जिंदा 2020, 09:31
मैंने मर्ज करने की कोशिश की है, लेकिन यह अपेक्षा से कम पंक्तियाँ दे रहा है।
 – 
Victor
28 जिंदा 2020, 09:35
ओह, मुझे सभी नमूने प्राप्त करने के लिए एक CJ चरण याद आ रहा है। tidyr::complete एक आसान तरीका हो सकता है।
 – 
Gregor Thomas
28 जिंदा 2020, 09:38

2 जवाब

सबसे बढ़िया उत्तर

हो सकता है कि आप निम्न आधार R समाधान (merge() का उपयोग करके) आज़मा सकते हैं

z <- merge(x,cbind(Sample = rep(unique(x$Sample),each = nrow(y)),y),all = T)

ऐसा है कि

> z
    Sample code code_conn pool_content
1  Sample1   A1        X1          ASD
2  Sample1   A1        X2         <NA>
3  Sample1   A1        X3          POS
4  Sample1   B1        Y1          QAW
5  Sample1   B1        Y2          QWP
6  Sample1   B1        Y3          SDE
7  Sample1   B1        Y4          LKS
8  Sample1   B1        Y5         <NA>
9  Sample1   C1        Z1         <NA>
10 Sample1   C1        Z2          JMP
11 Sample1   C1        Z3          MSK
12 Sample1   C1        Z4         <NA>
13 Sample1   D1        P1         <NA>
14 Sample1   D1        P2         <NA>
15 Sample1   D1        P3         <NA>
16 Sample1   D1        P4         <NA>
17 Sample1   D1        P5         <NA>
18 Sample1   D1        P6         <NA>
19 Sample2   A1        X1          ASD
20 Sample2   A1        X2          POS
21 Sample2   A1        X3         <NA>
22 Sample2   B1        Y1          QAW
23 Sample2   B1        Y2          QWP
24 Sample2   B1        Y3          LKS
25 Sample2   B1        Y4          ASE
26 Sample2   B1        Y5          ASM
27 Sample2   C1        Z1          MSK
28 Sample2   C1        Z2         <NA>
29 Sample2   C1        Z3         <NA>
30 Sample2   C1        Z4         <NA>
31 Sample2   D1        P1          EAX
32 Sample2   D1        P2          EBX
33 Sample2   D1        P3          ECX
34 Sample2   D1        P4          EDX
35 Sample2   D1        P5          MOV
36 Sample2   D1        P6          ALL
1
ThomasIsCoding 28 जिंदा 2020, 13:48

मुझे लगता है कि नमूना और कोड द्वारा dplyr::left_join आपकी मदद कर सकता है। यह आपको गैर-मौजूद मूल्यों के लिए NULL देगा और पंक्तियों को आपके पास समान संख्या में रखेगा।

0
melowgs 28 जिंदा 2020, 13:18