当我到达 r 中的最后一行数据时,如何获得逻辑 (T/F) 结果?

How to obtain a logical (T/F) result when I reach the last row of data in r?

我希望根据是否已到达最后一行数据来获取 T/F 值的向量。我在下面附上了一个示例数据框。

df <- structure(list(A = 1:24, B = 2:25), class = "data.frame", row.names = c(NA, -24L))

根据提供的数据,这是我想要的输出。

c("F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", 
  "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "T")

如果这是一个类似于 is.na 的函数,我可以将其包含在 ifelse 语句中,那就太好了。

df$new_variable <- ifelse(if.last(df) == 'T' & df$B == 25, 0, df$B)

rep

更容易
df$new_variable <- rep(c(FALSE, TRUE), c(nrow(df)-1, 1))

或者创建一列 FALSE 并将最后一行分配回 TRUE

df$new_variable <- FALSE
df$new_variable[nrow(df)] <- TRUE

或者如果我们需要一个矩阵

row(df) == nrow(df)

或单列

seq_along(df[[1]]) == nrow(df)

为自己创建了一个小函数来解决这个简单的例子。

if.last <- function(x) ifelse(row(x) < nrow(x), 'F', 'T')
if.last(df)
      [,1] [,2]
 [1,] "F"  "F" 
 [2,] "F"  "F" 
 [3,] "F"  "F" 
 [4,] "F"  "F" 
 [5,] "F"  "F" 
 [6,] "F"  "F" 
 [7,] "F"  "F" 
 [8,] "F"  "F" 
 [9,] "F"  "F" 
[10,] "F"  "F" 
[11,] "F"  "F" 
[12,] "F"  "F" 
[13,] "F"  "F" 
[14,] "F"  "F" 
[15,] "F"  "F" 
[16,] "F"  "F" 
[17,] "F"  "F" 
[18,] "F"  "F" 
[19,] "F"  "F" 
[20,] "F"  "F" 
[21,] "F"  "F" 
[22,] "F"  "F" 
[23,] "F"  "F" 
[24,] "T"  "T" 
df$new_variable <- ifelse(if.last(df) == 'T', 0, df$B)
tail(df)
    A  B new_variable 
19 19 20             20 
20 20 21             21 
21 21 22             22 
22 22 23             23 
23 23 24             24 
24 24 25              0 

你可以试试这个:

1:nrow(df) == nrow(df)

使其成为一个函数:

is.last <- function(data) {
  1:nrow(data) == nrow(data)
}

is.last(df)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE