私は107列と745000行(私の例よりはるかに大きい)のデータフレームを持っています。FAST in R
ケースには、それぞれのシーケンスの終わりにいくつかのタイプが含まれているように見えるので、分離したい文字タイプの列があります。
これらの型の最後の部分を新しい列に分けたいと思います。
私は自分の解決策を作りましたが、745000行すべてを53回繰り返すにはあまりにも遅いようです。
だから私はいくつかの任意のデータと、次のコードで私の解決策を埋め込む:
set.seed(1)
code_1 <- paste0(round(runif(5000, 100000, 999999)), "_", round(runif(1000, 1, 15)))
code_2 <- sample(c(paste0(round(runif(10, 100000, 999999)), "_", round(runif(10, 1, 15))), NA), 5000, replace = TRUE)
code_3 <- sample(c(paste0(round(runif(3, 100000, 999999)), "_", round(runif(3, 1, 15))), NA), 5000, replace = TRUE)
code_4 <- sample(c(paste0(round(runif(1, 100000, 999999)), "_", round(runif(1, 1, 15))), NA), 5000, replace = TRUE)
code_type_1 <- rep(NA, 5000)
code_type_2 <- rep(NA, 5000)
code_type_3 <- rep(NA, 5000)
code_type_4 <- rep(NA, 5000)
df <- data.frame(cbind(code_1,
code_2,
code_3,
code_4,
code_type_1,
code_type_2,
code_type_3,
code_type_4),
stringsAsFactors = FALSE)
df_new <- data.frame(code_1 = character(),
code_2 = character(),
code_3 = character(),
code_4 = character(),
code_type_1 = character(),
code_type_2 = character(),
code_type_3 = character(),
code_type_4 = character(),
stringsAsFactors = FALSE)
for (i in 1:4) {
i_t <- i + 4
temp <- strsplit(df[, c(i)], "[_]")
for (j in 1:nrow(df)) {
df_new[c(j), c(i)] <- unlist(temp[j])[1]
df_new[c(j), c(i_t)] <- ifelse(is.na(unlist(temp[j])[1]), NA, unlist(temp[j])[2])
}
print(i)
}
for (i in 1:8) {
df_new[, c(i)] <- factor(df_new[, c(i)])
}
誰もがここに物事をスピードアップする方法をいくつかのアイデアを持っていますか?
これについては何が遅いですか? – hrbrmstr
私は例えば5k行を提供しましたが、それらを処理するにはまだ時間が必要です。この問題は、データに行を追加すると指数関数的に増加する傾向があります。そして、私は745000持っています。 – sandoronodi