当我到达 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
我希望根据是否已到达最后一行数据来获取 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