R运行相关性,忽略非数字数据

R运行相关性,忽略非数字数据,r,correlation,R,Correlation,我尝试使用以下代码在所有数值(数据集包含数值和非数值列)之间运行关联: mydata= read.csv("C:\\full_path\\playerData.csv", header = TRUE) mydata=data.frame(mydata) vals=cor(mydata, use="complete.obs", method="pearson") write.csv(vals,"C:\\Users\\weiler\\Desktop\\RStudioOutput.csv") 基于

我尝试使用以下代码在所有数值(数据集包含数值和非数值列)之间运行关联:

mydata= read.csv("C:\\full_path\\playerData.csv", header = TRUE)
mydata=data.frame(mydata)
vals=cor(mydata, use="complete.obs", method="pearson") 
write.csv(vals,"C:\\Users\\weiler\\Desktop\\RStudioOutput.csv")
基于此站点:我得到错误信息:

cor(mydata,use=“complete.obs”,method=“pearson”)中出错:“x”必须是数字


我的错误似乎是因为一些数据是非数字的。有没有一种简单的方法可以忽略非数字数据?

正如David Arenburg所说,您可以使用Is.numeric,然后使用subset。这里有一个解释

mydata <-
  data.frame(alpha1=letters[1:10], alpha2=letters[11:20], 
             num1=runif(10), num2=runif(10))

#    alpha1 alpha2       num1       num2
# 1       a      k 0.02123999 0.50840184
# 2       b      l 0.23963061 0.27622386
# 3       c      m 0.32220265 0.69144157
# 4       d      n 0.08147787 0.59194675
# 5       e      o 0.15875212 0.61067014
# 6       f      p 0.87679916 0.65882239
# 7       g      q 0.94408782 0.07846614
# 8       h      r 0.41669714 0.18997531
# 9       i      s 0.35965571 0.90215068
# 10      j      t 0.64287793 0.84273345
所以,使用这个布尔向量来子集,你只得到数值列

my_num_data <- mydata[, sapply(mydata, is.numeric)]

#         num1       num2
# 1  0.5118055 0.82442771
# 2  0.3512970 0.12066818
# 3  0.4344065 0.94698653
# 4  0.1222383 0.72324135
# 5  0.1974004 0.51563337
# 6  0.2794483 0.06022451
# 7  0.1519816 0.32559160
# 8  0.5129894 0.76990432
# 9  0.2433832 0.08038982
# 10 0.7893464 0.45767856
并将其显示为一行:

cor(mydata[, sapply(mydata, is.numeric)],
    use = "complete.obs", method = "pearson")

可能只是
mydata[sapply(mydata,is.numeric)]
正是我所需要的。感谢您提供的详细示例!
cor(my_num_data, use = "complete.obs", method = "pearson")

#           num1      num2
# num1 1.0000000 0.2852567
# num2 0.2852567 1.0000000
cor(mydata[, sapply(mydata, is.numeric)],
    use = "complete.obs", method = "pearson")