按行选择行中的最后一个值

时间:2011-09-23 17:21:59

标签: r dataframe

我有一个数据框,其中每一行都是不同长度值的向量。我想在每一行中创建一个最后一个真值的向量。

以下是一个示例数据框:

df <- read.table(tc <- textConnection("
   var1    var2    var3    var4
     1       2       NA      NA
     4       4       NA      6
     2       NA      3       NA                
     4       4       4       4              
     1       NA      NA      NA"), header = TRUE); close(tc)

我想要的值向量因此是c(2,6,3,4,1)

我无法弄清楚如何让R识别最后一个值。

感谢任何帮助!

3 个答案:

答案 0 :(得分:15)

通过结合三件事来做到这一点:

  • 使用NA
  • 标识is.na
  • 使用tail
  • 查找向量中的最后一个值
  • 使用apply将此功能应用于data.frame
  • 中的每一行

代码:

lastValue <- function(x)   tail(x[!is.na(x)], 1)

apply(df, 1, lastValue)
[1] 2 6 3 4 1

答案 1 :(得分:1)

以下是使用矩阵子集的答案:

df[cbind( 1:nrow(df), max.col(!is.na(df),"last") )]

max.col调用将选择每行中最后一个非NA值的位置(如果它们都是NA,则选择第一个位置)。

答案 2 :(得分:0)

这是另一个版本,在获取反向输入的第一个元素之前删除所有无穷大,NA和NaN:

apply(df, 1, function(x) rev(x[is.finite(x)])[1] )
# [1] 2 6 3 4 1