如何查看连续的最后填充值?

时间:2018-04-19 12:21:19

标签: r

我是R.的新手。当我试图连续找到最后一个填充值时,我的任务中遇到了一些麻烦。比方说,我有一张表,如:

Name   D1   D2   D3   D4   D5
-----+----+----+----+----+----
Stacy  1    4    NA   6    NA
Joy    NA   4    8    NA   8
Anna   NA   NA   7    1    NA
Ray    2    NA   3    NA   NA
Fey    8    NA   NA   NA   NA

根据数据,我想从每一行中提取最后一个填充值。我尝试构建的预期表格就像

Name   D1   D2   D3   D4   D5   LastD
-----+----+----+----+----+----+-------
Stacy  1    4    NA   6    NA   6
Joy    NA   4    8    NA   8    8
Anna   NA   NA   7    1    NA   1
Ray    2    NA   3    NA   NA   2
Fey    8    NA   NA   NA   NA   8

或者只有一列“LastD”没问题。到目前为止,这是我写的代码。

data2 <- for (i in 1:nrow(data)) {
    x <- rep(0, nrow(data))
    for (j in ncol(data):1) {
        if (!is.na(data[i,j])) {
        x[i] <- data[i,j]
            }
        }
    return(x)
    }

我知道这是一个非常简单的代码,我也意识到它在这里和那里都有它的缺陷。你能帮我改进一下吗?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

df <- read.table(text = '
   D1   D2   D3   D4   D5
Stacy  1    4    NA   6    NA
Joy    NA   4    8    NA   8
Anna   NA   NA   7    1    NA
Ray    2    NA   3    NA   NA
Fey    8    NA   NA   NA   NA',
       header = TRUE)

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

df

      D1 D2 D3 D4 D5 D6
Stacy  1  4 NA  6 NA  6
Joy   NA  4  8 NA  8  8
Anna  NA NA  7  1 NA  1
Ray    2 NA  3 NA NA  3
Fey    8 NA NA NA NA  8

答案 1 :(得分:2)

以下是使用row/column提取值

的选项
df$D6 <- df[cbind(seq_len(nrow(df)), max.col(!is.na(df), "last"))]
df$D6
#[1] 6 8 1 3 8