我在数据集示例中有一个可变代码
code
asdas%4shdgjas%4hj%4
asdsadsad
fgfd%4akk
我想以这样的方式处理:当它在变量中找到%4时,它应该将%4的位置分配给变量pos(例如,在第一个记录中,它来自6)。之后需要创建另一个变量val,以便它应该从pos。
的值中对变量代码进行子串答案 0 :(得分:1)
你可以做到
df <- data.frame(code=c("asdas%4shdgjas%4hj%4", "asdsadsad", "fgfd%4akk"), stringsAsFactors = FALSE)
df$pos <- sapply(gregexpr("%4", df$code, fixed = TRUE), "[", 1)
df$val <- with(df, substr(code, pos, nchar(code)))
df
# code pos val
# 1 asdas%4shdgjas%4hj%4 6 %4shdgjas%4hj%4
# 2 asdsadsad -1 asdsadsad
# 3 fgfd%4akk 5 %4akk
这是多个匹配的替代方案,可能需要install.packages("tidyr")
之前:
df <- data.frame(code=c("asdas%4shdgjas%4hj%4", "asdsadsad", "fgfd%4akk"), stringsAsFactors = FALSE)
df$pos <- gregexpr("%4", df$code, fixed = TRUE)
df <- tidyr::unnest(df)
df$val <- with(df, substr(code, pos, nchar(code)))
df
# Source: local data frame [5 x 3]
#
# code pos val
# (chr) (int) (chr)
# 1 asdas%4shdgjas%4hj%4 6 %4shdgjas%4hj%4
# 2 asdas%4shdgjas%4hj%4 15 %4hj%4
# 3 asdas%4shdgjas%4hj%4 19 %4
# 4 asdsadsad -1 asdsadsad
# 5 fgfd%4akk 5 %4akk