在R中删除数据帧中的最后n行(删除零行)
所以,如果我想在dataframe中删除最后n行,我会写在R中删除数据帧中的最后n行(删除零行),r,R,所以,如果我想在dataframe中删除最后n行,我会写 head(df, -n) 它适用于除0以外的所有n。有人知道为什么吗 head(df, -0) 将返回空数据帧 0需要单独处理-(head只是[的一个方便功能: getAnywhere(head.data.frame) #function (x, n = 6L, ...) #{ # stopifnot(length(n) == 1L) # n <- if (n < 0L) # max(nrow
head(df, -n)
它适用于除0以外的所有n。有人知道为什么吗
head(df, -0)
将返回空数据帧
0需要单独处理-(
head
只是[
的一个方便功能:
getAnywhere(head.data.frame)
#function (x, n = 6L, ...)
#{
# stopifnot(length(n) == 1L)
# n <- if (n < 0L)
# max(nrow(x) + n, 0L)
# else min(n, nrow(x))
# x[seq_len(n), , drop = FALSE]
#}
正如注释中已经指出的,这是因为-0等于0,并且
head(df,0)
表示返回零行。在下面的带符号零部分中,我们将进一步探讨这一点
即使n为零,也删除n行
首先,下面是一个简单的解决方法,即使n等于零,也会删除最后n行:
head(df, nrow(df) - n)
符号零
另一方面,在浮点(但不是整数运算)中,实际上有符号零的情况。考虑这个版本的头,如果n=0,则删除0行,如果n为+0:/p>,则返回0行。
is_minus_zero <- function(x) identical(x, 0) && sign(1/x) == -1
head2 <- function(x, n) {
if (is_minus_zero(n)) df
else head(x, n)
}
head2(BOD, 0)
## [1] Time demand
## <0 rows> (or 0-length row.names)
head2(BOD, -0)
## Time demand
## 1 1 8.3
## 2 2 10.3
## 3 3 19.0
## 4 4 16.0
## 5 5 15.6
## 6 7 19.8
is\u减\u零子集使用零返回data.frame的结构。这就是它的意图。请尝试iris[0]
。
is_minus_zero <- function(x) identical(x, 0) && sign(1/x) == -1
head2 <- function(x, n) {
if (is_minus_zero(n)) df
else head(x, n)
}
head2(BOD, 0)
## [1] Time demand
## <0 rows> (or 0-length row.names)
head2(BOD, -0)
## Time demand
## 1 1 8.3
## 2 2 10.3
## 3 3 19.0
## 4 4 16.0
## 5 5 15.6
## 6 7 19.8