R中的条件格式引用其他行中的数据



下面是一个数据帧(df(,我需要根据一组条件替换其中的信息。有关所需解决方案,请参见result。然而,我的一个条件需要引用前一行中的值,我无法理解代码不起作用的原因。我当前的代码替换了第12行中的值,但考虑到最后一个条件语句,这不应该发生。如有任何建议,不胜感激。

我更喜欢基本包中的解决方案,但请包括其他解决方案,因为它们可能对其他人有用。

提前感谢您抽出时间。


# rm(list=ls())
df <- read.table(text = "PROBLEM SITE LENGTH
x   S9.2    249
fix y   1
x   S9.2    5
x   S9.2    5
x   S9.2    5
x   S9.2    5
x   S9.2    5
fix y   2
fix y   2
x   S3.2    2
x   S3.2    2
fix y   1
x   S3.2    22
", header = TRUE)
result <- read.table(text = "PROBLEM SITE LENGTH
x   S9.2    249
fix S9.2    1
x   S9.2    5
x   S9.2    5
x   S9.2    5
x   S9.2    5
x   S9.2    5
fix y   2
fix y   2
x   S3.2    2
x   S3.2    2
fix y   1
x   S3.2    22
", header = TRUE)
# Partially working code. Note the last condition statement appears to be the problem.
df$SITE[df$PROBLEM == "fix" & df$LENGTH == 1 & c(df$LENGTH[- 1], 0 ) >= 5] = 
df$SITE[which(df$PROBLEM == "fix" & df$LENGTH == 1 & c(df$LENGTH[- 1], 0 ) >= 5) - 1]
df$SITE2 <- with(df,
ifelse(PROBLEM == "fix" & LENGTH == 1 & c(FALSE, LENGTH[-nrow(df)] > 5),
c(NA, SITE[-nrow(df)]), SITE)
)
df
#    PROBLEM SITE LENGTH SITE2
# 1        x S9.2    249  S9.2
# 2      fix    y      1  S9.2
# 3        x S9.2      5  S9.2
# 4        x S9.2      5  S9.2
# 5        x S9.2      5  S9.2
# 6        x S9.2      5  S9.2
# 7        x S9.2      5  S9.2
# 8      fix    y      2     y
# 9      fix    y      2     y
# 10       x S3.2      2  S3.2
# 11       x S3.2      2  S3.2
# 12     fix    y      1     y
# 13       x S3.2     22  S3.2

问题是,您试图用[-1]引用上一个LENGTH,这具有查看下一个值的矢量逻辑效果。当我们看第2行(有"fix"one_answers"1"(时,我们想与249进行比较,然后我们需要在某个向量的第二个位置进行比较。

cbind(df[,1:3], `LENGTH[-1]` = c(df$LENGTH[-1], 0), `LENGTH[-nrow(df)]` = c(0, df$LENGTH[-nrow(df)]))
#    PROBLEM SITE LENGTH LENGTH[-1] LENGTH[-nrow(df)]
# 1        x S9.2    249          1                 0
# 2      fix    y      1          5               249
# 3        x S9.2      5          5                 1
# 4        x S9.2      5          5                 5
# 5        x S9.2      5          5                 5
# 6        x S9.2      5          5                 5
# 7        x S9.2      5          2                 5
# 8      fix    y      2          2                 5
# 9      fix    y      2          2                 2
# 10       x S3.2      2          2                 2
# 11       x S3.2      2          1                 2
# 12     fix    y      1         22                 2
# 13       x S3.2     22          0                 1

相关内容

  • 没有找到相关文章

最新更新