Hello Petr.
Thank you for replying.
Your step is better than my step!.
I added one step
> s.dcast <- dcast(s.m, ID+variable~dat)
> subset(s.dcast,df1!=df2)
ID variable df1 df2
1 ID1 VAL1 2 0
5 ID2 VAL2 3 2
9 ID3 VAL3 4 2
This output is what I wanted!!.
P.S.
When I asked this question, I used indent for readability.
So maybe it was added extra space.
I executed same command. It has no extra space.
> str(s1)
'data.frame': 3 obs. of 4 variables:
$ ID : Factor w/ 3 levels "ID1","ID2","ID3": 1 2
3
$ VAL1: int 2 0 0
$ VAL2: int 2 3 2
$ VAL3: int 3 3 4> str(s2)
'data.frame': 3 obs. of 4 variables:
$ ID : Factor w/ 3 levels "ID1","ID2","ID3": 1 2
3
$ VAL1: int 0 0 0
$ VAL2: int 2 2 2
$ VAL3: int 3 3 2
Best regards.
2016?2?29?(?) 18:16 PIKAL Petr <petr.pikal at precheza.cz>:
> Hi
>
> You does not need to create function, you can use functions already
> available.
>
> > s1<- read.table("clipboard", header=T, sep=",")
> > s2<- read.table("clipboard", sep=",")
>
> You presented second table without names.
> > names(s2) <- names(s1)
>
> > s1
> ID VAL1 VAL2 VAL3
> 1 ID1 2 2 3
> 2 ID2 0 3 3
> 3 ID3 0 2 4
> > s2
> ID VAL1 VAL2 VAL3
> 1 ID1 0 2 3
> 2 ID2 0 2 3
> 3 ID3 0 2 2
>
> You need to add a column in which you specify data frame and merge them
> > s1$dat<-"df1"
> > s2$dat<-"df2"
> > s<-merge(s1,s2, all=T)
>
> Now you need to reshape your data
>
> > library(reshape2)
>
> > s.m<-melt(s)
> Using ID, dat as id variables
> > s.m
> ID dat variable value
> 1 ID1 df1 VAL1 2
> 2 ID2 df2 VAL1 0
> 3 ID2 df1 VAL1 0
> 4 ID3 df2 VAL1 0
> 5 ID3 df1 VAL1 0
> 6 ID1 df2 VAL1 0
> 7 ID1 df1 VAL2 2
> 8 ID2 df2 VAL2 2
> 9 ID2 df1 VAL2 3
> 10 ID3 df2 VAL2 2
> 11 ID3 df1 VAL2 2
> 12 ID1 df2 VAL2 2
> 13 ID1 df1 VAL3 3
> 14 ID2 df2 VAL3 3
> 15 ID2 df1 VAL3 3
> 16 ID3 df2 VAL3 2
> 17 ID3 df1 VAL3 4
> 18 ID1 df2 VAL3 3
>
> And cast the new structure.
> > dcast(s.m, ID+variable~dat)
> ID variable df1 df2
> 1 ID1 VAL1 2 NA
> 2 ID1 VAL2 2 NA
> 3 ID1 VAL3 3 NA
> 4 ID2 VAL1 0 0
> 5 ID2 VAL2 3 2
> 6 ID2 VAL3 3 3
> 7 ID3 VAL1 0 0
> 8 ID3 VAL2 2 2
> 9 ID3 VAL3 4 2
> 10 ID1 VAL1 NA 0
> 11 ID1 VAL2 NA 2
> 12 ID1 VAL3 NA 3
>
> This was the point that I was rather surprised but I found a reason. Your
> ID variable does not have 3 but four values - although ID1 looks the same,
> in one there is an extra space, therefore you have different ID1 in s1 from
> ID1 in s2.
>
> That is why it is recommended to use dput() for exchanging data with
> others.
>
> > str(s)
> 'data.frame': 6 obs. of 5 variables:
> $ ID : Factor w/ 4 levels " ID1"," ID2",..: 1 2 2 3
3 4
> $ VAL1: int 2 0 0 0 0 0
> $ VAL2: int 2 2 3 2 2 2
> $ VAL3: int 3 3 3 2 4 3
> $ dat : chr "df1" "df2" "df1"
"df2" ...
>
> > s1$ID
> [1] ID1 ID2 ID3
> Levels: ID1 ID2 ID3
> > s2$ID
> [1] ID1 ID2 ID3
> Levels: ID2 ID3 ID1
>
> > str(s1)
> 'data.frame': 3 obs. of 5 variables:
> $ ID : Factor w/ 3 levels " ID1"," ID2",..: 1 2 3
> $ VAL1: int 2 0 0
> $ VAL2: int 2 3 2
> $ VAL3: int 3 3 4
> $ dat : chr "df1" "df1" "df1"
> > str(s2)
> 'data.frame': 3 obs. of 5 variables:
> $ ID : Factor w/ 3 levels " ID2"," ID3",..: 3 1 2
> $ VAL1: int 0 0 0
> $ VAL2: int 2 2 2
> $ VAL3: int 3 3 2
> $ dat : chr "df2" "df2" "df2"
> >
>
> Cheers
> Petr
>
>
> > -----Original Message-----
> > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of
> > Hiroyuki Sato
> > Sent: Monday, February 29, 2016 9:44 AM
> > To: r-help at r-project.org
> > Subject: [R] create function for compare two dataframe.
> >
> > Hello
> >
> > I would like to create a funciton which is create new dataframe for
> > compare reslut of two dataframes.
> >
> > No. COLUMN DF1 DF2
> > "1" "VAL1" "2" "0" # <-
compare ID1,VAL1
> > "2" "VAL2" "3" "2" # <-
comapre ID2,VAL2
> > "3" "VAL3" "4" "2" # <-
compare ID3,VAL3
> >
> > s1 <- read.table("sample1.txt",header=T,sep=',')
> > s2 <- read.table("sample2.txt",header=T,sep=',')
> > comp_data(df1,df2)
> >
> > sample1.txt
> > ID,VAL1,VAL2,VAL3
> > ID1,2,2,3
> > ID2,0,3,3
> > ID3,0,2,4
> >
> > sample2.txt
> > ID1,0,2,3
> > ID2,0,2,3
> > ID3,0,2,2
> >
> > I created the functions, but I got the following error.
> > Could you tell me how to add new frame data?
> > Or alternative way?
> >
> > 1: In `[<-.factor`(`*tmp*`, ri, value = "3") :
> > invalid factor level, NA generated
> > 2: In `[<-.factor`(`*tmp*`, ri, value = "VAL3") :
> > invalid factor level, NA generated
> > 3: In `[<-.factor`(`*tmp*`, ri, value = "4") :
> > invalid factor level, NA generated
> >
> >
> >
> > comp_data <- function(df1,df2) {
> > #
> > # create null data.frame
> > out <- data.frame(matrix(rep(NA,4),nrow=1))[numeric(0), ]
> > colnames(out) <-
c("ID","Site","df1","df2")
> >
> > # column names
> > col_names <- colnames(df1)
> >
> > # col_size
> > col_size <- ncol(df1)
> > row_size <- nrow(df1)
> >
> > for( col in 2:col_size ){
> > for( row in 1:row_size ){
> > if( df1[row,col] != df2[row,col] ){
> > out <-
> > rbind(out,c(df1[row,1],col_names[col],df1[row,col],df2[row,col]))
> > }
> > }
> > }
> > out
> > }
> >
> > Best regards.
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-
> > guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ________________________________
> Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou
> ur?eny pouze jeho adres?t?m.
> Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav?
> neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie
> vyma?te ze sv?ho syst?mu.
> Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email
> jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
> Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi
> ?i zpo?d?n?m p?enosu e-mailu.
>
> V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
> - vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en?
> smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
> - a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout;
> Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany
> p??jemce s dodatkem ?i odchylkou.
> - trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve
> v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
> - odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za
> spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n
> nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto
> emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich
> existence je adres?tovi ?i osob? j?m zastoupen? zn?m?.
>
> This e-mail and any documents attached to it may be confidential and are
> intended only for its intended recipients.
> If you received this e-mail by mistake, please immediately inform its
> sender. Delete the contents of this e-mail with all attachments and its
> copies from your system.
> If you are not the intended recipient of this e-mail, you are not
> authorized to use, disseminate, copy or disclose this e-mail in any manner.
> The sender of this e-mail shall not be liable for any possible damage
> caused by modifications of the e-mail or by delay with transfer of the
> email.
>
> In case that this e-mail forms part of business dealings:
> - the sender reserves the right to end negotiations about entering into a
> contract in any time, for any reason, and without stating any reasoning.
> - if the e-mail contains an offer, the recipient is entitled to
> immediately accept such offer; The sender of this e-mail (offer) excludes
> any acceptance of the offer on the part of the recipient containing any
> amendment or variation.
> - the sender insists on that the respective contract is concluded only
> upon an express mutual agreement on all its aspects.
> - the sender of this e-mail informs that he/she is not authorized to enter
> into any contracts on behalf of the company except for cases in which
> he/she is expressly authorized to do so in writing, and such authorization
> or power of attorney is submitted to the recipient or the person
> represented by the recipient, or the existence of such authorization is
> known to the recipient of the person represented by the recipient.
>
[[alternative HTML version deleted]]