Hi, Please use ?dput() to show the datasets as one of the rows (Id "four") in first dataset didn't show 11 elements.
df1 <- structure(list(Id = c("one", "one", "two", "two", "three", "three", "three", "four", "five", "five"), col1 = c("a1", NA, "b1", "b1", NA, NA, "c1", "d1", "e1", NA), col2 = c("a2", NA, "b2", "b2", "c2", NA, "c2", "D2", "e2", "e2"), col3 = c("a3", "a3", "b3", "b3", "c3", "c3", "c3", "d3", "E3", "e3"), col4 = c("a4", "a4", "B4", "b4", "c4", "c4", "c4", "d4", "e4", "E4"), col5 = c("a5", "a5", "b5", "b5", "C5", "c5", "c5", "d5", "e5", "e5"), col6 = c("A6", "a6", "b6", "B6", "c6", "c6", "C6", "d6", "e6", "e6"), col7 = c("a7", "A7", "b7", "b7", "c7", "c7", "c7", NA, "e7", "e7"), col8 = c("a8", "a8", "b8", "b8", "c8", "c8", "c8", NA, "e8", "e8"), col9 = c("a9", "a9", "b9", "b9", "c9", "C9", NA, "", "e9", "e9"), col10 = c(NA, "a10", "b10", "b10", NA, "c10", NA, "", NA, "e10")), .Names = c("Id", "col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10"), class = "data.frame", row.names = c(NA, -10L )) df2 <- structure(list(Id = c("one", "one", "two", "two", "three", "three", "three", "four", "five", "five"), colnew = c("A6", "A7", "B4", "B6", "C5", "C9", "C6", "D2", "E3", "E4")), .Names = c("Id", "colnew"), class = "data.frame", row.names = c(NA, -10L)) #expected result res <- structure(list(Id = c("one", "two", "three", "four", "five"), col1 = c("a1", "b1", "c1", "d1", "e1"), col2 = c("a2", "b2", "c2", "D2", "e2"), col3 = c("a3", "b3", "c3", "d3", "E3"), col4 = c("a4", "B4", "c4", "d4", "E4"), col5 = c("a5", "b5", "C5", "d5", "e5"), col6 = c("A6", "B6", "C6", "d6", "e6"), col7 = c("A7", "b7", "c7", NA, "e7"), col8 = c("a8", "b8", "c8", NA, "e8"), col9 = c("a9", "b9", "C9", "", "e9"), col10 = c("a10", "b10", "c10", "", "e10")), .Names = c("Id", "col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10" ), class = "data.frame", row.names = c(NA, -5L)) ##there would be simple ways to perform this operation. res1 <- as.data.frame(t(sapply(split(df1, df1$Id), function(x) { x1 <- x[, -1] c(Id = unique(x[, 1]), apply(x1, 2, function(y) { y1 <- unique(y[!is.na(y)]) y2 <- if (length(y1) == 0) NA else y1 if (any(y2 %in% df2$colnew)) unique(toupper(y2)) else y2 })) })), stringsAsFactors = FALSE) res1 <- res1[order(gsub("\\d+", "", res1$col1)), ] row.names(res1) <- 1:nrow(res1) identical(res, res1) # [1] TRUE A.K. I am stuck in a situation and seek urgent help!. I have a DF something like this; Id col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 one a1 a2 a3 a4 a5 A6 a7 a8 a9 NA one NA NA a3 a4 a5 a6 A7 a8 a9 a10 two b1 b2 b3 B4 b5 b6 b7 b8 b9 b10 two b1 b2 b3 b4 b5 B6 b7 b8 b9 b10 three NA c2 c3 c4 C5 c6 c7 c8 c9 NA three NA NA c3 c4 c5 c6 c7 c8 C9 c10 three c1 c2 c3 c4 c5 C6 c7 c8 NA NA four d1 D2 d3 d4 d5 d6 NA NA five e1 e2 E3 e4 e5 e6 e7 e8 e9 NA five NA e2 e3 E4 e5 e6 e7 e8 e9 e10 * each row is different and some has NA. * the capital letters in some cells are key values which will be useful for further analysis I have another DF which has only the key values Id colnew one A6 one A7 two B4 two B6 three C5 three C9 three C6 four D2 five E3 five E4 Now, I need to aggregate the first DF based on "ID" values to get "unique" entries for each "ID" so that the output should look like the below Id col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 one a1 a2 a3 a4 a5 A6 A7 a8 a9 a10 two b1 b2 b3 B4 b5 B6 b7 b8 b9 b10 three c1 c2 c3 c4 C5 C6 c7 c8 C9 c10 four d1 D2 d3 d4 d5 d6 NA NA five e1 e2 E3 E4 e5 e6 e7 e8 e9 e10 Thanks for the help Regards, karthick ______________________________________________ R-help@r-project.org mailing list 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.