「abcX」などのピリオドを含む文字列列を持つ data.frame があります。文字列をピリオドで分割し、3 番目のセグメント (例では "c") を保持したいと考えています。これが私がやっていることです。
> df = data.frame(v=c("a.b.a.X", "a.b.b.X", "a.b.c.X"), b=seq(1,3))
> df
v b
1 a.b.a.X 1
2 a.b.b.X 2
3 a.b.c.X 3
そして、私が欲しいのは
> df = data.frame(v=c("a.b.a.X", "a.b.b.X", "a.b.c.X"), b=seq(1,3))
> df
v b
1 a 1
2 b 2
3 c 3
を使用しようとしていますwithin
が、奇妙な結果が得られます。最初の列の最初の行の値が繰り返されています。
> get = function(x) { unlist(strsplit(x, "\\."))[3] }
> within(df, v <- get(as.character(v)))
v b
1 a 1
2 a 2
3 a 3
これを行うためのベストプラクティスは何ですか? 私は何を間違っていますか?
更新: @agstudy の回答から使用したソリューションは次のとおりです。
> df = data.frame(v=c("a.b.a.X", "a.b.b.X", "a.b.c.X"), b=seq(1,3))
> get = function(x) gsub(".*?[.].*?[.](.*?)[.].*", '\\1', x)
> within(df, v <- get(v))
v b
1 a 1
2 b 2
3 c 3