Ответ 1
Вы можете использовать apply
, чтобы применить его ко всему файлу data.frame
apply(x, 2, function(y) as.numeric(gsub("%", "", y)))
x1 x2 x3
[1,] 10 60 1
[2,] 20 50 2
[3,] 30 40 3
Каков наиболее эффективный способ применения gsub
к различным столбцам?
Не работает
x1=c("10%","20%","30%")
x2=c("60%","50%","40%")
x3 = c(1,2,3)
x = data.frame(x1,x2,x3)
per_col = c(1,2)
x = gsub("%","",x[,per_col])
Как я могу наиболее эффективно отбросить знак "%" в указанных столбцах. Могу ли я применить его ко всему кадру данных? Это было бы полезно в случае, когда я не знаю, где процентные столбцы.
Вы можете использовать apply
, чтобы применить его ко всему файлу data.frame
apply(x, 2, function(y) as.numeric(gsub("%", "", y)))
x1 x2 x3
[1,] 10 60 1
[2,] 20 50 2
[3,] 30 40 3
Или вы можете попробовать решение lapply
:
as.data.frame(lapply(x, function(y) gsub("%", "", y)))
x1 x2 x3
1 10 60 1
2 20 50 2
3 30 40 3
Первый ответ работает, но будьте осторожны, если вы используете data.frame
со строкой: ответ @docendo discimus вернет NAs
.
Если вы хотите сохранить содержимое своего столбца в виде строки, просто удалите as.numeric
и преобразуйте свою таблицу в кадр данных после:
as.data.frame(apply(x, 2, function(y) as.numeric(gsub("%", "", y))))
x1 x2 x3
[1,] 10 60 1
[2,] 20 50 2
[3,] 30 40 3
Чтобы добавить ответ docendo discimus, расширение с несмежными столбцами и возвращение data.frame
:
x1 <- c("10%", "20%", "30%")
x2 <- c("60%", "50%", "40%")
x3 <- c(1, 2, 3)
x4 <- c("60%", "50%", "40%")
x <- data.frame(x1, x2, x3, x4)
x[, c(1:2, 4)] <- as.data.frame(apply(x[,c(1:2, 4)], 2,
function(x) {
as.numeric(gsub("%", "", x))}
))
> x
x1 x2 x3 x4
1 10 60 1 60
2 20 50 2 50
3 30 40 3 40
> class(x)
[1] "data.frame"
Чтобы очистить %
, вы можете сделать:
x[per_col] <- lapply(x[per_col], function(y) as.numeric(gsub("%", "", y)))
x
x1 x2 x3
1 10 60 1
2 20 50 2
3 30 40 3