[R] A question on data frame

David Winsemius dwinsemius at comcast.net
Wed Aug 24 21:10:21 CEST 2016


> On Aug 24, 2016, at 11:48 AM, Christofer Bogaso <bogaso.christofer at gmail.com> wrote:
> 
> Hello again,
> 
> Let say I have a data.frame which I call as reference data frame :
> 
> Ref = data.frame(c("a", "d", "c", "e", "f", "x"), matrix(NA, 6, 5))
> colnames(Ref) = c("a1", "a2", "a3", "a4", "a5", "a6")
> Ref
> 
> Now I have another data.frame, which I call as value data frame :
> 
> Value = data.frame(c("x", "c"), matrix(1:10, 2, 5))
> colnames(Value) = c("a1", "b2", "b3", "b4", "b5", "b6")
> Value
> 
> Now I need to insert the values of my 'Value' data frame into my 'Ref'
> data frame, according to the order of the column of 'a1' of 'Ref'.
> 
> For example, the NA values of last row of Ref will be (1,  3,  5,  7,
> 9) and 3rd row of Ref will be (2,  4,  6,  8, 10). Basically I am
> matching the "a1" column of both my data frames. If there is no match
> found then corresponding row of Ref will remain unchanged.
> 
> Is there any R way to perform the same programmatically. In reality
> both my data frames are quite big, so looking for some automated way
> to perform the same.
> 

> Ref[ match(Value$a1, Ref$a1), 2:6] <- Value[ Value$a1 %in% Ref$a1, 2:6]

> Ref
  a1 a2 a3 a4 a5 a6
1  a NA NA NA NA NA
2  d NA NA NA NA NA
3  c  2  4  6  8 10
4  e NA NA NA NA NA
5  f NA NA NA NA NA
6  x  1  3  5  7  9

The `match` function creates an index vector for the placement,  and the `%in%` expression restricts the rows to items which will have a match on the LHS of the assignment.

-- 
David.


> Thanks for your time.
> 
> Regards,
> 
> ______________________________________________
> 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.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list