user6340762
user6340762

Reputation: 175

How can I use R to fill rows based on column?

I have the following table

    Code    Name    Class
    1       
    2       Monday  day
    5       green   color
    9       
    6       
    1       red     color
    1       
    2       
    9       Tuesday day
    6       
    5       

Goal is to the fill the Name and Class columns based on the Code column of a filled row. For example, the second row is filled and the code is 2. I would like to fill all the rows where code = 2 with Name=Monday and Class=day.
I tried using fill() from tidyR but that seems to require ordered data.

    structure(list(Code = c(1L, 2L, 5L, 9L, 6L, 1L, 1L, 2L, 9L, 6L, 
5L), Name = structure(c(1L, 3L, 2L, 1L, 1L, 4L, 1L, 1L, 5L, 1L, 
1L), .Label = c("", "green", "Monday", "red", "Tuesday"), class = "factor"), 
    Class = structure(c(1L, 3L, 2L, 1L, 1L, 2L, 1L, 1L, 3L, 1L, 
    1L), .Label = c("", "color", "day"), class = "factor")), .Names = c("Code", 
"Name", "Class"), class = "data.frame", row.names = c(NA, -11L
))

Upvotes: 0

Views: 186

Answers (1)

Prem
Prem

Reputation: 11955

library(dplyr)
final_df <- left_join(df, df[df$Name!='',], by='Code')[,c(1,4:5)]
colnames(final_df) <- colnames(df)
final_df

Upvotes: 3

Related Questions