Bert Gunter
2022-Jun-12 17:11 UTC
[R] comparing and changing(swaping) the value of columns from two diffrent data farmes
Excellent! I am sharing the below with the list in case it might be useful for others. Here is a similar approach that uses logical indexing directly, rather than through ifelse(), via a simple function to pick out the rows to change. Figuring out the details of how it works may be helpful to you in case it's not immediately obvious. foo <- function(dat1, dat2, testcols){ apply(dat1[, testcols] != dat2[,testcols],1,any) ## ?apply ?any for details } Yielding...> wh <- foo(df1, df2, 2:3) > wh ## logical index of rows that require changes[1] TRUE TRUE FALSE TRUE FALSE> df2[wh, 4:8] <- 2 - df2[wh, 4:8] ## per your specification > ## and since df2's first 3 columns must be the same as df1's: > df2[,2:3] <- df1[, 2:3]> df2SNPID OA EA id00001 id00002 id00003 id00004 id00005 1 snp001 C A 0.99 0.00 1.03 0.03 0.01 2 snp002 G A 0.98 0.00 1.00 0.00 0.00 3 snp003 C A 1.00 1.03 2.00 0.00 1.00 4 snp004 G A 0.98 0.01 0.00 0.98 0.02 5 snp005 C T 1.00 0.00 1.01 1.00 1.00 On Sun, Jun 12, 2022 at 9:32 AM anteneh asmare <hanatezera at gmail.com> wrote:> > Dear, Bert, Thanks i try to extract dataframe1[ , c(2, 3)] and > combine to dataframe2 , then i apply if else > it works, Thanks > best, > Hana > > On 6/12/22, Bert Gunter <bgunter.4567 at gmail.com> wrote: > > No you don't. You need to learn R's data manipulation procedures so > > that you can program such (in this case fairly simple) procedures > > yourself. > > > > The ifelse() function might be a good place to start here. > > ?ifelse > > > > Bert Gunter > > > > > > > > On Sun, Jun 12, 2022 at 8:58 AM anteneh asmare <hanatezera at gmail.com> > > wrote: > >> > >> Dear Bert , Thanks for reply! I need the the function or package that > >> used to compare columns from two different data frames. > >> Best, > >> Hana > >> On 6/12/22, Bert Gunter <bgunter.4567 at gmail.com> wrote: > >> > Is this some sort of homework? This list has a no homework policy. > >> > > >> > If not, please show us your attempt to solve the problem. You seem to > >> > be asking us to do your work for you, which is not a good way to learn > >> > R. Show us your attempt and the error messages and/or incorrect > >> > results you got. You will improve your R skills faster this way. IMO > >> > only, of course. The specifications you provided seem to require > >> > fairly basic data manipulations that you should really learn how to do > >> > yourself. > >> > > >> > Also... > >> > Thanks for the reproducible example -- that is a good way to get a > >> > helpful response. But please give us the code that creates the example > >> > rather than just providing the text, which requires us to read and > >> > convert it ourselves, an extra step. In general, if we can just rerun > >> > your code it makes it easier to help ... which makes it more likely > >> > that someone will give you a useful response. > >> > > >> > Bert Gunter > >> > > >> > "The trouble with having an open mind is that people keep coming along > >> > and sticking things into it." > >> > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > >> > > >> > On Sun, Jun 12, 2022 at 7:07 AM anteneh asmare <hanatezera at gmail.com> > >> > wrote: > >> >> > >> >> I have the following two data frames > >> >> Data frame 1 > >> >> "SNPID" "OA" "EA" > >> >> "snp001" "C" "A" > >> >> "snp002" "G" "A" > >> >> "snp003" "C" "A" > >> >> "snp004" "G" "A" > >> >> "snp005" "C" "T" > >> >> > >> >> Data frame 2 > >> >> SNPID OA EA id00001 id00002 id00003 id00004 id00005 > >> >> snp001 A C 1.01 2 > >> >> 0.97 > >> >> 1.97 1.99 > >> >> snp002 A G 1.02 2 > >> >> 1 > >> >> 2 2 > >> >> snp003 C A 1 1.03 > >> >> 2 > >> >> 0 1 > >> >> snp004 A G 1.02 1.99 > >> >> 2 > >> >> 1.02 1.98 > >> >> snp005 C T 1 0 > >> >> 1.01 > >> >> 1 1 > >> >> > >> >> I want to if OA s and EAs in data frame 2 is the same as OAs and EAs > >> >> data frame 1 in such case I want to keep all information in data > >> >> fram2 as it is . However if OA s and EAs in data frame 2 is > >> >> different from OAs and EAs data frame 1, I want to change OA s and > >> >> EAs in data frame 2 to OAs and EAs data frame 1 and I want to > >> >> redefine the values of the dosages (ids) of the variant (the dosage d > >> >> for the i-th individual and the j-th variant would become d_ij > >> >> new=2-dij. > >> >> Dosage [j,]=2-dosage[j,] > >> >> My desire data frame looks like > >> >> Dataframe new > >> >> SNPID" "OA" "EA" id00001 id00002 id00003 id00004 > >> >> id00005 > >> >> "snp001" "C" "A" 2-1.01 2- 2 2- 0.97 > >> >> 2-1.97 > >> >> 2-1.99 > >> >> "snp002" "G" "A" 2- 1.02 2- 2 > >> >> 2-1 > >> >> 2-2 2- 2 > >> >> "snp003" "C" "A" 1 1.03 > >> >> 2 > >> >> 0 1 > >> >> "snp004" "G" "A" 2-1.02 2-1.99 > >> >> 2-2 2-1.02 2-1.98 > >> >> "snp005" "C" "T" 1 0 > >> >> 1.01 1 1 > >> >> Dose any one can help me the r code for the above. > >> >> Kind regards, > >> >> Hana > >> >> > >> >> ______________________________________________ > >> >> 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. > >> > > >