R语言中与Python pandas的df.values等价的实现方法
R语言实现类似Python df.values的无标签数值矩阵方法
你可以通过unname()函数直接移除矩阵的行列标签,无需手动循环填充,实现代码如下:
# 针对你读取的df,直接执行即可 X <- unname(data.matrix(df))
原写法问题说明
- 直接调用
matrix(df)不符合预期的原因:R中data.frame本质是等长列表的集合,直接转换为矩阵会将每一列作为单个列表元素存入矩阵,取值时会返回整列列表而非单个数值。 data.matrix(df)已经完成了数值转换,只是默认保留了原data.frame的行名、列名作为矩阵的dimnames属性,输出时会显示标签,不会影响数值取值逻辑。
效果验证
用你提供的测试样本验证效果:
# 构造测试样本 X <- matrix(data=c(1,2,3,4,5,6), nrow=3, ncol=2) df_dummy <- data.frame(X, row.names = c("A","B","C")) # 转换为无标签数值矩阵 X_res <- unname(data.matrix(df_dummy))
输出结果完全符合需求:
> X_res [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > X_res[1,1] [1] 1
替代方案
你也可以手动清空矩阵的dimnames属性,效果完全一致:
X_res <- data.matrix(df_dummy) dimnames(X_res) <- NULL
如果你的data.frame全为数值类型,用as.matrix(df)替换data.matrix(df)也能得到相同结果。
内容的提问来源于stack exchange,提问作者Eleonora
相关产品推荐
相关产品推荐

