将gsub应用于各种列

时间:2014-05-23 14:00:00

标签: r dataframe gsub

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])

如何最有效地删除指定列中的“%”符号。 我可以将它应用于整个数据框吗?如果我不知道列的百分比在哪里,这将非常有用。

6 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:7)

或者,您可以尝试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

答案 2 :(得分:2)

第一个答案有效,但如果您使用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

答案 3 :(得分:2)

要清除%,您可以执行以下操作:

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

答案 4 :(得分:1)

要在docendo discimus' answer上添加具有不相邻列的扩展名并返回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"

答案 5 :(得分:1)

我们可以unlist per_col列,删除“ %”符号并将其转换为数字。

x[per_col] <- as.numeric(gsub("%","", unlist(x[per_col])))
#In this case using sub would be enough too as we have only 1 % symbol to replace
#x[per_col] <- as.numeric(sub("%","", unlist(x[per_col])))

x
#  x1 x2 x3
#1 10 60  1
#2 20 50  2
#3 30 40  3