【问题标题】:Change data frame with factors to a big matrix R将带有因子的数据框更改为大矩阵 R
【发布时间】:2015-08-19 09:14:18
【问题描述】:

我有一个大数据框(22k 行,400 列),它是使用 csv 文件中的 read.csv 生成的。看来每一列都是一个因子,所有的行值都是这个因子的水平。

我现在想做一些分析(如 PCA),但除非它是矩阵,否则我无法使用它,但即使我像矩阵一样尝试它,我得到的只是

> prcomp(as.matrix(my_data))
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

有没有办法将这个带有因子的数据框转换为一个简单的大矩阵?

我是 R 新手,所以请原谅所有(可能是可怕的)错误。

谢谢

【问题讨论】:

标签: r factors


【解决方案1】:

你可以这样做:

df<-data.frame(a=as.factor(c(1,2,3)), b=as.factor(c(2,3,4)))
m<-apply(apply(df, 1, as.character), 1, as.numeric)

apply 在给定的 data.frame 上使用方法。重要的是不要遗漏先将其转换为字符,否则它将被转换为因子的内部数字表示。

要添加列名,请执行以下操作:

m<-m[-1,] # removes the first 'empty' row
colnames(m)<-c("a", "b") # replace the right hand side with your desired column names, e.g. the first row of your data.frame

还有一个提示。您可能从文件中读取了 data.frame,当您设置参数 header=TRUE 时,第一行将不是标题,但 data.frame 的列名将是正确的。

【讨论】:

  • 非常感谢 Verena,它成功了!我现在有另一个问题。因为数据框的第一行是标签,所以我得到了 NA。我尝试使用 > m[1,]=as.character(my_data[1,]) 再次添加标签,但我得到的只是一些数字来代替名称。似乎 R 仍然将我的数据的第一行不是字符而是因子(?)。有趣的是,它与我在第一列中的行标签一起工作,所以当我尝试 >m[,1]=as.vector(my_data[,1]) 时,标签被完美放置。有什么想法吗?
  • 您的意思是数据框的第一行是标题(如列名)?矩阵不能有字符/字符串值。
  • 添加了一个答案@Vagos
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
相关资源
最近更新 更多