R运行相关性,忽略非数字数据
R run correlation, ignoring non-numeric data
我正在尝试使用以下代码在所有数值(数据集包含数值列和非数值列)之间建立关联:
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")
基于此站点:http://www.statmethods.net/stats/correlations.html 我收到错误:
Error in cor(mydata, use = "complete.obs", method = "pearson") : 'x' must be numeric
我的错误似乎是因为一些数据是非数字的。有没有简单的方法可以忽略非数字数据?
正如 David Arenburg 所说,您可以使用 is.numeric 然后是子集。这里有一个解释。
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
哪些列是数字?
sapply(mydata, is.numeric)
# alpha1 alpha2 num1 num2
# FALSE FALSE TRUE TRUE
因此,使用此布尔向量进行子集化,您只会得到数字列
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()
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")
我正在尝试使用以下代码在所有数值(数据集包含数值列和非数值列)之间建立关联:
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")
基于此站点:http://www.statmethods.net/stats/correlations.html 我收到错误:
Error in cor(mydata, use = "complete.obs", method = "pearson") : 'x' must be numeric
我的错误似乎是因为一些数据是非数字的。有没有简单的方法可以忽略非数字数据?
正如 David Arenburg 所说,您可以使用 is.numeric 然后是子集。这里有一个解释。
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
哪些列是数字?
sapply(mydata, is.numeric)
# alpha1 alpha2 num1 num2
# FALSE FALSE TRUE TRUE
因此,使用此布尔向量进行子集化,您只会得到数字列
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()
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")