1

vec<-c("a", "b", "c", "d") 我的任务是从键字符串的右侧和左侧提取第二个元素。

如果我们的密钥字符串是“d”,如果我们这样做

i<-c("d")
vec.1 <- append(vec.1, vec[which(vec == i) + 2])

我们得到 NA。但如果我们这样做

i<-c("a")    
vec.1 <- append(vec.1, vec[which(vec == i) - 2])

我们得到“b”、“c”、“d”。是否可以将下标中的负值视为超出向量的位置,例如超出向量长度的正下标?这样,结果将是 NA。

4

2 回答 2

3
library(Hmisc)

Lag(vec,2)[vec=="d"]
#[1] "b"

Lag(vec,2)[vec=="a"]
#[1] ""

Lag(vec,-2)[vec=="a"]
#[1] "c"

Lag(vec,-2)[vec=="c"]
#[1] ""
于 2012-10-31T19:32:16.917 回答
2

我确信我可以做得更好,但现在已经很晚了。为什么不写一个小函数来做你想做的事。

myVec <- function(input, match, change) {
  temp = which(input == match)
  if ((temp + change) <= 0) {
    append(NA, input)
  } else {
    append(input, input[temp + change])
  }
}

vec <- c("a", "b", "c", "d")

myVec(vec, "a", -1)
# [1] NA  "a" "b" "c" "d"
myVec(vec, "c", -1)
# [1] "a" "b" "c" "d" "b"
myVec(vec, "c", -3)
# [1] NA  "a" "b" "c" "d"
myVec(vec, "d", 1)
# [1] "a" "b" "c" "d" NA
于 2012-10-31T19:42:02.390 回答