下面是一个数据帧(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