删除 R 中指定值以下的数据行
Removing rows of data in R below a specified value
我想知道是否有人可以提供帮助...
我有一个包含连续时间列的数据框,我正在尝试删除低于指定时间的所有行。
数据从大约开始。 11:29:00 但我想删除时间 12:30.00 之前和时间 14:20.00 之后的所有行。
由于每秒都会记录数据,因此删除不必要的行将有很大帮助,并使我更容易管理这些数据,因此非常感谢任何帮助。
这是数据帧的头部,你可以看到时间是以秒为单位连续的。我想删除 GPS.Time 列中直到 12:30:00 的所有这些行。希望这是有道理的。
Raw.Vel. Smooth.Vel. GPS.Time
1.486 0.755 11:39:39
1.425 1.167 11:39:40
1.466 1.398 11:39:41
1.533 1.552 11:39:42
1.517 1.594 11:39:43
1.918 1.556 11:39:44
正在创建以上数据框:
Raw.Vel. <- c(1.486,1.425, 1.466, 1.533, 1.517, 1.918)
Smooth.Vel. <- c(0.755, 1.167, 1.398, 1.552, 1.594, 1.556)
GPS.Time <- c("11:39:39", "11:39:40", "11:39:41", "11:39:42", "11:39:43", "11:39:44")
sample <- data.frame(Raw.Vel., Smooth.Vel., GPS.Time)
提前致谢。
将 GPS.Time 变成 "POSIXct" 对象:
df$time <- as.POSIXct(df$GPS.Time, format="%H:%M:%S")
然后您可以使用逻辑进行过滤:
filtered_df <- df[df$time < as.POSIXct("12:30:00", format="%H:%M:%S"), ]
使用 lubridate
包将字符串时间列转换为某种时间 class:
library(lubridate)
sample$GPS.Time <- hms(sample$GPS.Time)
要获得所需的输出,只需使用带有括号 ([
) 的子集,以及您想要的条件。在您的示例中,我删除了最多 11:39:42.
的所有行
output <- sample[sample$GPS.Time < hms("11:39:42"),]
您可以将 "GPS.Time" 列中的条目转换为字符(这本来是一个因子变量)。之后,您可以通过将时间与存储为字符串的指定截止时间进行比较来分离集合,该字符串应以相同的格式 (HH:MM:SS):
sample$GPS.Time <- as.character(sample$GPS.Time)
cutoff_time <- "11:39:42" # modify as necessary
sample <- sample[-which(sample$GPS.Time < cutoff_time),] #remove all rows with times smaller than the cutoff_time
#> sample
# Raw.Vel. Smooth.Vel. GPS.Time
#4 1.533 1.552 11:39:42
#5 1.517 1.594 11:39:43
#6 1.918 1.556 11:39:44
我想知道是否有人可以提供帮助...
我有一个包含连续时间列的数据框,我正在尝试删除低于指定时间的所有行。
数据从大约开始。 11:29:00 但我想删除时间 12:30.00 之前和时间 14:20.00 之后的所有行。 由于每秒都会记录数据,因此删除不必要的行将有很大帮助,并使我更容易管理这些数据,因此非常感谢任何帮助。
这是数据帧的头部,你可以看到时间是以秒为单位连续的。我想删除 GPS.Time 列中直到 12:30:00 的所有这些行。希望这是有道理的。
Raw.Vel. Smooth.Vel. GPS.Time
1.486 0.755 11:39:39
1.425 1.167 11:39:40
1.466 1.398 11:39:41
1.533 1.552 11:39:42
1.517 1.594 11:39:43
1.918 1.556 11:39:44
正在创建以上数据框:
Raw.Vel. <- c(1.486,1.425, 1.466, 1.533, 1.517, 1.918)
Smooth.Vel. <- c(0.755, 1.167, 1.398, 1.552, 1.594, 1.556)
GPS.Time <- c("11:39:39", "11:39:40", "11:39:41", "11:39:42", "11:39:43", "11:39:44")
sample <- data.frame(Raw.Vel., Smooth.Vel., GPS.Time)
提前致谢。
将 GPS.Time 变成 "POSIXct" 对象:
df$time <- as.POSIXct(df$GPS.Time, format="%H:%M:%S")
然后您可以使用逻辑进行过滤:
filtered_df <- df[df$time < as.POSIXct("12:30:00", format="%H:%M:%S"), ]
使用 lubridate
包将字符串时间列转换为某种时间 class:
library(lubridate)
sample$GPS.Time <- hms(sample$GPS.Time)
要获得所需的输出,只需使用带有括号 ([
) 的子集,以及您想要的条件。在您的示例中,我删除了最多 11:39:42.
output <- sample[sample$GPS.Time < hms("11:39:42"),]
您可以将 "GPS.Time" 列中的条目转换为字符(这本来是一个因子变量)。之后,您可以通过将时间与存储为字符串的指定截止时间进行比较来分离集合,该字符串应以相同的格式 (HH:MM:SS):
sample$GPS.Time <- as.character(sample$GPS.Time)
cutoff_time <- "11:39:42" # modify as necessary
sample <- sample[-which(sample$GPS.Time < cutoff_time),] #remove all rows with times smaller than the cutoff_time
#> sample
# Raw.Vel. Smooth.Vel. GPS.Time
#4 1.533 1.552 11:39:42
#5 1.517 1.594 11:39:43
#6 1.918 1.556 11:39:44