如何将数据帧列转换为数字类型?
当前回答
使用下面的代码,您可以将所有数据帧的列转换为数字(X是我们想要转换它的列的数据帧):
as.data.frame(lapply(X, as.numeric))
要将整个矩阵转换为数字,你有两种方法: :
mode(X) <- "numeric"
or:
X <- apply(X, 2, as.numeric)
你也可以使用数据。矩阵函数将所有内容转换为数字,尽管要注意,因子可能无法正确转换,因此先将所有内容转换为字符会更安全:
X <- sapply(X, as.character)
X <- data.matrix(X)
如果我想同时转换成矩阵和数字,我通常使用最后一个
其他回答
有一点对我很有帮助:如果要转换的变量范围(或者不止一个),可以使用sapply。
有点荒谬,举个例子:
data(cars)
cars[, 1:2] <- sapply(cars[, 1:2], as.factor)
假设第3列、第6-15列和第37列的数据帧需要转换为数字:
dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)
考虑到可能存在char列,这是基于@Abdou在获取列类型的excel表格自动回答:
makenumcols<-function(df){
df<-as.data.frame(df)
df[] <- lapply(df, as.character)
cond <- apply(df, 2, function(x) {
x <- x[!is.na(x)]
all(suppressWarnings(!is.na(as.numeric(x))))
})
numeric_cols <- names(df)[cond]
df[,numeric_cols] <- sapply(df[,numeric_cols], as.numeric)
return(df)
}
df<-makenumcols(df)
蒂姆是对的,谢恩有个遗漏。以下是其他例子:
R> df <- data.frame(a = as.character(10:15))
R> df <- data.frame(df, num = as.numeric(df$a),
numchr = as.numeric(as.character(df$a)))
R> df
a num numchr
1 10 1 10
2 11 2 11
3 12 3 12
4 13 4 13
5 14 5 14
6 15 6 15
R> summary(df)
a num numchr
10:1 Min. :1.00 Min. :10.0
11:1 1st Qu.:2.25 1st Qu.:11.2
12:1 Median :3.50 Median :12.5
13:1 Mean :3.50 Mean :12.5
14:1 3rd Qu.:4.75 3rd Qu.:13.8
15:1 Max. :6.00 Max. :15.0
R>
我们的data.frame现在有了因子列的摘要(counts)和as.numeric()的数值摘要(这是错误的,因为它得到了数值因子级别)以及as.numeric(as.character())的(正确的)摘要。
虽然其他人已经很好地讨论了这个话题,但我想补充一个额外的快速思考/提示。可以使用regexp提前检查字符是否可能仅由数字组成。
for(i in seq_along(names(df)){
potential_numcol[i] <- all(!grepl("[a-zA-Z]",d[,i]))
}
# and now just convert only the numeric ones
d <- sapply(d[,potential_numcol],as.numeric)
想要了解更多复杂的正则表达式,以及为什么要学习/体验它们的力量,请访问这个非常好的网站:http://regexr.com/
Df列出你的数据框架。X是要转换的df的一列
as.numeric(factor(df$x))
推荐文章
- 当我的ggplot2语法合理时,我如何处理R CMD检查“全局变量无可见绑定”注释?
- 如何解窝(爆炸)在一个熊猫数据帧列,成多行
- 如何将表转换为数据帧
- 转换data.frame列到向量?
- 在每个列表元素上调用int()函数?
- 如何将颜色分配给ggplot2中具有稳定映射的类别变量?
- 在基础图形的绘图区域之外绘制一个图例?
- 根据Pandas中的另一列提取列值
- 在ggplot2中的各个facet上注释文本
- 确定数据帧列的数据类型
- 删除重复的行
- NumPy或Pandas:保持数组类型为整数,同时具有NaN值
- 将行名转换为第一列
- 如何替换一个Pandas数据框架的字符串列中的文本?
- 从pandas apply()返回多个列