我的问题是关于测量数据的自动过滤,因为我有几百个文件要处理。
文件结构如下所示:

test1 <- read.table("~/test1.txt",sep="\t",dec=".",skip=17,header=TRUE)

Number  Time.s      Potential.V Current.A
1       0.0000      0.060       -0.7653
2       0.0285      0.060       -0.7597
3       0.0855      0.060       -0.7549
.....
17      0.8835      0.060       -0.7045
18      0.9405      0.060       -0.5983
19      0.9975      0.061       -0.1370
20      1.0545      0.062        0.1295
21      1.1115      0.063        0.2680
......
8013    456.6555    0.066       -1.1070
8014    456.7125    0.065       -1.1850
8015    456.7695    0.063       -1.2610
8016    456.8265    0.062       -1.3460
8017    456.8835    0.061       -1.4380
8018    456.9405    0.060       -1.4350
8019    456.9975    0.060       -1.0720
8020    457.0545    0.060       -0.8823
8021    457.1115    0.060       -0.7917
8022    457.1685    0.060       -0.7481

我需要用 Potential.V == 0.06 去掉开头和结尾的额外行。我的问题是各种文件开头和结尾的行数没有修复。

下一个限制是该文件包含多个测量值,因此我不能删除 data.frame 中所有值为 0.06 的行。

我手动切割的那一刻,不是很优雅,但我不知道更好的解决方案:
test_b1 <- data.frame(test1$Number[18:8018],test1$Time.s[18:8018],test1$Potential.V[18:8018],test1$Current.A[18:8018])

我尝试使用像这样的迭代
for (c in 1:(length(test1))) {
    if (counter>1) & ((as.numeric(r[counter])- as.numeric(r[counter-1]))==1) {
       cat("Skip \n")}
}

但我没有找到可行的解决方案,因为我这边缺乏技能:/。

CRAN 上是否有模块或更优雅的方法来解决此类问题?

此致

最佳答案

这是使用 rle 的一个:

filter.df <- function(df) {
    pot.rle <- rle(df$Potential.V)
    idx <- cumsum(pot.rle$lengths)
    val <- pot.rle$values
    chk <- ifelse(val[1] == 0.06 & val[length(val)] == 0.06, TRUE, FALSE)
    if (chk) {
        df[(idx[1]):(max(idx[1], idx[length(idx)-1])+1), ]
    }
}
filter.df(df)

#    Number   Time.s Potential.V Current.A
# 5      18   0.9405       0.060   -0.5983
# 6      19   0.9975       0.061   -0.1370
# 7      20   1.0545       0.062    0.1295
# 8      21   1.1115       0.063    0.2680
# 9    8013 456.6555       0.066   -1.1070
# 10   8014 456.7125       0.065   -1.1850
# 11   8015 456.7695       0.063   -1.2610
# 12   8016 456.8265       0.062   -1.3460
# 13   8017 456.8835       0.061   -1.4380
# 14   8018 456.9405       0.060   -1.4350

关于r - R 中测量数据的自动过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16610648/

10-12 17:33