2016-11-11 4 views
0

私は1つがどのように私は一緒に、文字列の2つの列を比較することができ

df1<- structure(list(V1 = structure(c(1L, 2L, 3L, 7L, 5L, 6L, 4L, 9L, 
8L), .Label = c("A0A061ACH4;Q95Q10;Q9U1W6", "A0A061ACL3;Q965I6;O76618", 
"A0A061ACR1;Q2XN02;F5GUA3;Q22498", "A0A061AJJ3;A0A061AEA8", "A0A061AL01", 
"C1P641", "H2FLH3;H2FLH2;A0A061ACT3;A0A061AE24;Q23551-2;Q23551;Q23551-4;Q23551-3;Q23551-5", 
"Q22501;A0A061AE05", "Q86CZ7"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA, 
-9L)) 

をDF1され、他方は、私がによって互いのラインからこれら2を比較したい

df2 <- structure(list(V1 = structure(c(1L, 2L, 3L, 6L, 5L, 4L, 8L, 9L, 
7L), .Label = c("A0A061ACH4;Q95Q10;Q9U1W6", "A0A061ACL3;Q965I6;O76618", 
"A0A061ACR1;Q2XN02;F5GUA3;Q22498", "A0A061AJJ3;A0A061AEA8", "A0A061AL01", 
"H2FLH3;H2FLH2;A0A061ACT3;A0A061AE24;Q23551-2;Q23551;Q23551-4;Q23551-3;Q23551-5", 
"Q22501;A0A061AE05", "Q27GQ4", "Q86CZ7"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA, 
-9L)) 

をDF2され、2人のDFを持っていますライン。の前にそしてDF1およびDF2の両方からのすべてのユニークな線で出力を行い、その後DF2とその逆

するDF1から類似している線 (一つの新たなDFでこれら二つのDFからすべての行を意味する)

df1にはないがdf2にある行は、df2については0と同じです。

期待される出力がDF1に存在しない

output<- structure(list(V1 = structure(c(1L, 2L, 3L, 4L, 8L, 6L, 7L, 5L, 
10L, 11L, 9L), .Label = c("", "A0A061ACH4;Q95Q10;Q9U1W6", "A0A061ACL3;Q965I6;O76618", 
"A0A061ACR1;Q2XN02;F5GUA3;Q22498", "A0A061AJJ3;A0A061AEA8", "A0A061AL01", 
"C1P641", "H2FLH3;H2FLH2;A0A061ACT3;A0A061AE24;Q23551-2;Q23551;Q23551-4;Q23551-3;Q23551-5", 
"Q22501;A0A061AE05", "Q27GQ4", "Q86CZ7"), class = "factor"), 
    V2 = structure(c(3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 
    1L), .Label = c("", "0", "df1"), class = "factor"), V3 = structure(c(3L, 
    1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c("", "0", 
    "df2"), class = "factor")), .Names = c("V1", "V2", "V3"), class = "data.frame", row.names = c(NA, 
-11L)) 
ここ

Q27GQ4を下回るようにすることができますが、我々はここでC1P641ゼロ に言及DF1には存在しなく出力のDF1の列になるよう、DF2に存在しますdf2では、出力のdf2の列にゼロがあります。

ここに1つのアプローチだ、私はRに非常に新しいですので、私は任意の助けをいただければ幸いですし、私はそれを

答えて

0

はこれを試してみてください:

op <- merge(df1,df2, 
     all.x = TRUE, 
     all.y = TRUE) 

op$df1 <- 1*(op$V1 %in% df1$V1) 

op$df2 <- 1*(op$V1 %in% df2$V1) 

> op 
                       V1 df1 df2 
1              A0A061ACH4;Q95Q10;Q9U1W6 1 1 
2              A0A061ACL3;Q965I6;O76618 1 1 
3             A0A061ACR1;Q2XN02;F5GUA3;Q22498 1 1 
4               A0A061AJJ3;A0A061AEA8 1 1 
5                  A0A061AL01 1 1 
6                   C1P641 1 0 
7 H2FLH3;H2FLH2;A0A061ACT3;A0A061AE24;Q23551-2;Q23551;Q23551-4;Q23551-3;Q23551-5 1 1 
8                Q22501;A0A061AE05 1 1 
9                   Q86CZ7 1 1 
10                   Q27GQ4 0 1 
は、

OR

library(dplyr) 

op <- merge(df1,df2, 
      all.x = TRUE, 
      all.y = TRUE) %>% 
     mutate(df1=1*(V1 %in% df1$V1), 
       df2=1*(V1 %in% df2$V1)) 

ここにあなたの余分な質問の回答があります:

-dnow df1とdf2からいくつの行が似ていますか?

sum(df1$V1 %in% df2$V1) 

- df2には存在しないdf1が何個存在しますか?

sum(!(df1$V1 %in% df2$V1)) 

- df1には存在しないdf2がいくつも存在しますか?

sum(!(df2$V1 %in% df1$V1)) 
+0

または 'op < - merge(data.frame(df1、V2 =" "、stringsAsFactors = FALSE)、data.frame(df2、V3 =" "、stringsAsFactors = FALSE)、すべて= TRUE)'です。次に、 'NA 'を' op [is.na(op)< - 0']に置き換えます。これで、後で '%in%'を使ってマッチする必要がなくなります。 – aichao

+0

@aichaoはdf1とdf2とdf2の間には何個の類似点があるのか​​を知ることができますか? –

+0

- df1とdf2の行数はどれくらいですか? 'sum(df1 $ V1%in%df2 $ V1)' - df2には存在しないdf1はどれくらいありますか? 'sum(!(df1 $ V1%%df2 $ V1))' - df1には存在しないdf2がいくつありますか? 'sum(!(df2 $ V1%in%df1 $ V1))' – OmaymaS

0

を行うにはどのようにそれを見つけ出すことができませんでした:

vals <- unique(c(as.character(df1$V1), as.character(df2$V1))) 
data.frame(vals, df1=is.na(match(vals, df1$V1)), df2=is.na(match(vals, df2$V1))) 
#                    vals df1 df2 
# 1              A0A061ACH4;Q95Q10;Q9U1W6 FALSE FALSE 
# 2              A0A061ACL3;Q965I6;O76618 FALSE FALSE 
# 3             A0A061ACR1;Q2XN02;F5GUA3;Q22498 FALSE FALSE 
# 4 H2FLH3;H2FLH2;A0A061ACT3;A0A061AE24;Q23551-2;Q23551;Q23551-4;Q23551-3;Q23551-5 FALSE FALSE 
# 5                  A0A061AL01 FALSE FALSE 
# 6                   C1P641 FALSE TRUE 
# 7               A0A061AJJ3;A0A061AEA8 FALSE FALSE 
# 8                   Q86CZ7 FALSE FALSE 
# 9                Q22501;A0A061AE05 FALSE FALSE 
# 10                   Q27GQ4 TRUE FALSE 
+0

df1とdf2の線がどれくらい類似しているかを知ることができますか? df1にはdf2には存在しないものがいくつあり、その逆もあります。 –

関連する問題