間動作中:パフォーマンスの問題2列のデータフレームが与えられるデータフレームの二つの列
- 長さ(要素の長さ)
- findLengthOf(これは、値の文字列である)ための要素のインデックス長さが必要です
したがって、2番目の列のすべてのインデックスの長さをすべて見つけて、結果を3番目の列に配置する必要があります。 私たちは1637年のな長さを検索し、1835年を得る場合には、上記の例を参照してください:
> df$length[1637]
[1] 1835
head(df)
length findLengthOf
1 6434 1637,386....
2 4272 4322,414....
3 7338 2052,639....
4 4932 190,1567....
5 2397 8963,844....
6 4405 103,4346....
head(df)
length findLengthOf result
1 6434 1637,386.... 1835, 2404, 4689
2 4272 4322,414.... 1184, 2721, 7215
3 7338 2052,639.... 5253, 2998, 6153
4 4932 190,1567.... 2931, 6496, 7784
5 2397 8963,844.... 3796, 3488, 6555
6 4405 103,4346.... 1662, 5481, 1244
set.seed(123)
df <- data.frame(length = sample(1e4),
findLengthOf = I(replicate(1e4, paste(sample(1:10000,1),sample(1:10000,1),sample(1:10000,1),sep=","), simplify = FALSE)))
df$result=lapply(lapply(df$findLengthOf,strsplit,split=","), function(x){df[x[[1]],"length"]})
コードは動作しますが、それは長い間になります。どうすればスピードを上げることができますか? はまた、なぜ
head(lapply(df$findLengthOf,strsplit,split=","))
はいつもとリストのこの奇妙なリストを返すん:
[[1]]
[[1]][[1]]
[1] "7744" "1346" "4626"
これらの二重括弧を回避する方法はありますか? 何か応答がありがとうございます!デビッド(セット固定= T)から
提案:
> ptm <- proc.time()
> df$result=lapply(lapply(df$findLengthOf,strsplit,split=",",fixed=T), function(x){df[x[[1]],"length"]})
> proc.time() - ptm
user system elapsed
17.220 0.000 17.147
> ptm <- proc.time()
> df$result=lapply(lapply(df$findLengthOf,strsplit,split=","), function(x){df[x[[1]],"length"]})
> proc.time() - ptm
user system elapsed
17.260 0.000 17.142
「1637年の長さと1835年の得点」は不明ですか? – zx8754
こんにちはzx8754、大丈夫です。つまり、1835年にdf $ length [1637]という結果になりました。 –
単に 'fixed = TRUE'を' strsplit'呼び出しに追加することで、〜X10回速く走らせることができます。また、 'strsplit'と' lapply'の両方がリストを返します。リストのリストです。私はまた、この質問が以前のものとどのように関連しているのだろうと思っています。最初の場所などで文字列に連結しないなど、パフォーマンスの比較や代替提案を無視したときです。 –