Hi all,
I have a data frame
tdat <- read.table(textConnection("A B C Y
A12 B03 C04 0.70
A23 B05 C06 0.05
A14 B06 C07 1.20
A25 A23 A12 3.51
A16 A25 A14 2,16"),header = TRUE)
I want match tdat$B with tdat$A and populate the column values of tdat$A
( col A and Col B) in the newly created columns (col D and col E). please
find my attempt and the desired output below
Desired output
A B C Y D E
A12 B03 C04 0.70 0 0
A23 B05 C06 0.05 0 0
A14 B06 C07 1.20 0 0
A25 A23 A12 3.51 B05 C06
A16 A25 A14 2,16 A23 A12
my attempt,
tdat$D <- 0
tdat$E <- 0
if(tdat$B %in% tdat$A)
{
tdat$D <- tdat$A[tdat$B]
tdat$E <- tdat$A[tdat$C]
}
but did not work.
Thank you in advance
[[alternative HTML version deleted]]
Hello, Here is one way. tdat$D <- ifelse(tdat$B %in% tdat$A, tdat$A[tdat$B], 0) tdat$E <- ifelse(tdat$B %in% tdat$A, tdat$A[tdat$C], 0) Hope this helps, Rui Barradas On 12/13/2017 9:36 PM, Val wrote:> Hi all, > > I have a data frame > tdat <- read.table(textConnection("A B C Y > A12 B03 C04 0.70 > A23 B05 C06 0.05 > A14 B06 C07 1.20 > A25 A23 A12 3.51 > A16 A25 A14 2,16"),header = TRUE) > > I want match tdat$B with tdat$A and populate the column values of tdat$A > ( col A and Col B) in the newly created columns (col D and col E). please > find my attempt and the desired output below > > Desired output > A B C Y D E > A12 B03 C04 0.70 0 0 > A23 B05 C06 0.05 0 0 > A14 B06 C07 1.20 0 0 > A25 A23 A12 3.51 B05 C06 > A16 A25 A14 2,16 A23 A12 > > my attempt, > > tdat$D <- 0 > tdat$E <- 0 > > if(tdat$B %in% tdat$A) > { > tdat$D <- tdat$A[tdat$B] > tdat$E <- tdat$A[tdat$C] > } > but did not work. > > Thank you in advance > > [[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. >
Thank you Rui, I did not get the desired result. Here is the output from your script A B C Y D E 1 A12 B03 C04 0.70 0 0 2 A23 B05 C06 0.05 0 0 3 A14 B06 C07 1.20 0 0 4 A25 A23 A12 3.51 1 1 5 A16 A25 A14 2,16 4 4 On Wed, Dec 13, 2017 at 4:36 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote:> Hello, > > Here is one way. > > tdat$D <- ifelse(tdat$B %in% tdat$A, tdat$A[tdat$B], 0) > tdat$E <- ifelse(tdat$B %in% tdat$A, tdat$A[tdat$C], 0) > > > Hope this helps, > > Rui Barradas > > > On 12/13/2017 9:36 PM, Val wrote: > >> Hi all, >> >> I have a data frame >> tdat <- read.table(textConnection("A B C Y >> A12 B03 C04 0.70 >> A23 B05 C06 0.05 >> A14 B06 C07 1.20 >> A25 A23 A12 3.51 >> A16 A25 A14 2,16"),header = TRUE) >> >> I want match tdat$B with tdat$A and populate the column values of >> tdat$A >> ( col A and Col B) in the newly created columns (col D and col E). >> please >> find my attempt and the desired output below >> >> Desired output >> A B C Y D E >> A12 B03 C04 0.70 0 0 >> A23 B05 C06 0.05 0 0 >> A14 B06 C07 1.20 0 0 >> A25 A23 A12 3.51 B05 C06 >> A16 A25 A14 2,16 A23 A12 >> >> my attempt, >> >> tdat$D <- 0 >> tdat$E <- 0 >> >> if(tdat$B %in% tdat$A) >> { >> tdat$D <- tdat$A[tdat$B] >> tdat$E <- tdat$A[tdat$C] >> } >> but did not work. >> >> Thank you in advance >> >> [[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/posti >> ng-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >>[[alternative HTML version deleted]]
Hi Val?
Here is something similar to what Bill suggested.
wainb <- which(tdat$A %in% tdat$B)
tdat[c(length(tdat$D)-1,length(tdat$D)),c("D","E")] <-
tdat[wainb,c("B","C")]
HTH
EK
On Wed, Dec 13, 2017 at 4:36 PM, Val <valkremk at gmail.com> wrote:
> Hi all,
>
> I have a data frame
> tdat <- read.table(textConnection("A B C Y
> A12 B03 C04 0.70
> A23 B05 C06 0.05
> A14 B06 C07 1.20
> A25 A23 A12 3.51
> A16 A25 A14 2,16"),header = TRUE)
>
> I want match tdat$B with tdat$A and populate the column values of tdat$A
> ( col A and Col B) in the newly created columns (col D and col E). please
> find my attempt and the desired output below
>
> Desired output
> A B C Y D E
> A12 B03 C04 0.70 0 0
> A23 B05 C06 0.05 0 0
> A14 B06 C07 1.20 0 0
> A25 A23 A12 3.51 B05 C06
> A16 A25 A14 2,16 A23 A12
>
> my attempt,
>
> tdat$D <- 0
> tdat$E <- 0
>
> if(tdat$B %in% tdat$A)
> {
> tdat$D <- tdat$A[tdat$B]
> tdat$E <- tdat$A[tdat$C]
> }
> but did not work.
>
> Thank you in advance
>
> [[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.
>
[[alternative HTML version deleted]]