나는 107 개의 열과 745,000 개의 행을 가진 데이터 프레임을 가지고 있습니다 (예제보다 훨씬 큽니다).문자열 열을 빠르게 나누기 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