Rayan Sp
Rayan Sp

Reputation: 1020

Select last value in a row & place it in another column

I have data table like this

Col1 | Col2 | Colx
 12  |  13  | 19
 34  |  NA  | NA
 13  |  33  | NA

to determine the last value in each row I used Andrie's suggestion here for a previous question on the same subject

But I'd like the output to be in a separated column, the expected output for the above example.

>

Column
  19
  34
  33

The OG question in the link above didn't solve my problem, as the output is not coming in a new column.

Upvotes: 0

Views: 128

Answers (2)

akrun
akrun

Reputation: 887118

Another option is

i1 <- which(!is.na(df1), arr.ind=TRUE)
unname(tapply(df1[i1], i1[,1], FUN=tail,1))
#[1] 19 34 33 

data

df1 <- structure(list(Col1 = c(12, 34, 13), Col2 = c(13,
NA, 33), Colx = c(19, 
NA, NA)), .Names = c("Col1", "Col2", "Colx"), 
row.names = c(NA, -3L), class = "data.frame")

Upvotes: 1

jogo
jogo

Reputation: 12559

We can do

apply(df, 1, function(x) tail(x[!is.na(x)], 1))

If you want the result in a new column, you can do:

df$newColumn <- apply(df, 1, function(x) tail(x[!is.na(x)], 1))

Upvotes: 3

Related Questions