仅在有意义时将数据框的列转换为数字

时间:2018-03-19 09:29:37

标签: r dataframe numeric coercion

data0 = data.frame(a=c(1,2,3,4),b=c("a","b","c","d"),c=c("1","2","3","4"))
data0[,2] = as.character(data0[,2])
data0[,3] = as.character(data0[,3])

class(data0[,2])
class(data0[,3])
data0[,2] = as.numeric(data0[,2])
data0[,3] = as.numeric(data0[,3])

class(data0[,2])
class(data0[,3])
data0[,2]
data0[,3]

在数据框data0中,列b确实是字符,但列c实际上是数字。 我想将字符列转换为数字列,只有当'这说得通。 如果我运行上面的代码,则列c会转换为我想要的数字,但是列b会转换为我不想要的NA。 如何转换'实际数字'列数字,而保持其他不变?

1 个答案:

答案 0 :(得分:3)

来自all.is.numeric包的HMisc函数 - 结合dplyr - 样式变异 - 在此处浮现:

library(Hmisc)
library(dplyr)    

data0 %>%
  mutate_if(all.is.numeric, as.numeric)

all.is.numeric检查字符向量中的所有元素是否实际为数字,然后mutate_if位将所有真实的列转换为数字。