【问题标题】:How to perform a PCA by reading in ONLY the columns of a dataset that have numeric data?如何通过仅读取具有数字数据的数据集的列来执行 PCA?
【发布时间】:2017-04-06 01:00:23
【问题描述】:

我正在尝试对月度温度进行 PCA,但我得到的数据集包含的列不仅仅是月度数据。我如何只阅读月份列来执行 PCA?这是我目前所拥有的一切:

dat_TEMP=read.table("TEMPERATURE.csv",header=TRUE, sep=";", dec=",",row.names=1)
attach(dat_TEMP)
df=data.frame(January,February,March,April,May,June,July,August,September,October,November,December)
dat.pca=prcomp(df,dat_TEMP,center=T,scale=T)

但是当我尝试运行最后一行时,它给了我这个错误: "colMeans(x, na.rm = TRUE) 中的错误:'x' 必须是数字"

谁能帮我解决这个问题?我需要做什么才能读出月份列?

【问题讨论】:

  • 您是否将两个 data.frames 传递给 prcomp?我认为您应该取出dat_TEMP 参数。另请查看sapply(df, class) 以查看df 中所有列的类别。如果它们不都是数字并且您期望它们是,那么在导入过程中可能出现了问题。

标签: r pca read.table


【解决方案1】:

您需要确保在提取数字列时未将其作为字符或因子传递。如果没有,您可以使用数字列对数据进行子集化,然后运行 ​​PCA。

您可以通过多种方式仅使用数字列对数据进行子集化。

使用 dplyr 中的 select_if()

library("dplyr")
data.numeric=select_if(data, is.numeric)

使用应用函数

colnums <- sapply(data, is.numeric)
data[ , colnums]

或者

data[, sapply(data, class) == "numeric"]

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2013-12-25
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多