У меня есть пробелы for for, который разбивает столбцы символов размеров (длина x ширина x глубина), а затем присваивает эти значения новому столбцу. Прямо сейчас я перебираю каждое наблюдение в своем ядре данных для создания этих переменных. Вот мой код (который работает), но медленный.Plyr/Apply in Place of A For Loop Вместо этого
library(stringi)
for(i in 1:nrow(data3)){
data3$Length[i] <- stri_split_fixed(str = as.character(data3$Dimensions[i]),pattern = "x", omit_empty = NA)[[1]][1]
data3$Width[i] <- stri_split_fixed(str = as.character(data3$Dimensions[i]),pattern = "x", omit_empty = NA)[[1]][2]
data3$Depth[i] <- stri_split_fixed(str = as.character(data3$Dimensions[i]),pattern = "x", omit_empty = NA)[[1]][3]
}
Есть ли функция plyr или apply, которая ускорит эту операцию? Если да, то какой синтаксис?
Обновление: Образец данных:
structure(list(Shape = structure(c(24L, 24L, 24L, 24L, 24L, 24L,
24L, 24L, 24L, 24L), .Label = c("Asscher", "Baguette", "Briolette",
"Bullets", "Circular Brilliant", "Cushion", "Emerald", "Flanders",
"Half Moon", "Heart", "Hexagon", "Kite", "Lozenge", "Marquise",
"Octagonal", "Old European", "Old Miner", "Other", "Oval", "Pear",
"Princess", "Radiant", "Rose Cut", "Round", "Shield", "Square",
"Tapered Baguette", "Trapezoid", "Triangular"), class = "factor"),
Carats = c(0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4
), Color = structure(c(6L, 7L, 2L, 4L, 6L, 1L, 1L, 7L, 8L,
2L), .Label = c("D", "E", "F", "G", "H", "I", "J", "K", "L",
"M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
"Y", "Z"), class = "factor"), Dimensions = c("4.58x4.61x2.97",
"4.66x4.69x2.95", "4.71x4.75x2.93", "4.73x4.74x2.91", "4.62x4.67x2.93",
"4.79x4.82x2.91", "4.6x4.62x2.92", "4.7x4.73x2.93", "4.66x4.7x2.91",
"4.68x4.71x2.92")), .Names = c("Shape", "Carats", "Color",
"Dimensions"), row.names = 400:409, class = "data.frame")
Хороший звонок. Это работает и намного быстрее, чем цикл. –
На самом деле это не так. Я просто попытался запустить операцию и получил ошибку. Большинство измерений выглядят как 4.74x4.77x2.85. После запуска первого кода все наблюдения имеют следующее: 4.74, 4.77, 2.85, хотя это только размеры для первого. Функция stri_split_fixed возвращает список. –
Отправьте образец своих данных (вставьте в свой вопрос вывод 'dput (data3 [1:10,])'), и я исправлю его. – eipi10