首页 > 解决方案 > Spearman 相关性和拆分 1 个变量

问题描述

       Year.Sales.Advertise.Employees
1               1985 1.05 162 32 
2               1986 1.26 285 47 
3               1987 1.47 540 23 
4               1988 2.16 261 68 
5               1989 1.95 360 32 
6                1990 2.4 690 17 
7               1991 2.37 495 58 
8               1992 3.15 948 75 
9               1993 3.57 720 98 
10             1994 4.41 1.14 43 
11             1995 4.5 1.395 76 
12             1996 5.61 1.56 89 
13            1997 5.19 1.38 108 
14             1998 5.67 1.26 76 
15             1999 5.16 1.71 65 
16              2000 6.84 1.86 93

我想找到销售和广告之间的斯皮尔曼相关性,我被困了 3 个小时,请帮忙。我想我必须将 1 个变量分成 5 个变量,但我很挣扎。

标签: r

解决方案


我们可以strsplit用来分割我们的数据,即

new_df <- setNames(data.frame(do.call(rbind, strsplit(df2$Year.Sales.Advertise.Employees, ' '))), 
                   strsplit(names(df2), '.', fixed = TRUE)[[1]])

这使,

   Year Sales Advertise Employees
1  1985  1.05       162        32
2  1986  1.26       285        47
3  1987  1.47       540        23
4  1988  2.16       261        68
5  1989  1.95       360        32
6  1990   2.4       690        17
7  1991  2.37       495        58
8  1992  3.15       948        75
9  1993  3.57       720        98
10 1994  4.41      1.14        43
11 1995   4.5     1.395        76
12 1996  5.61      1.56        89
13 1997  5.19      1.38       108
14 1998  5.67      1.26        76
15 1999  5.16      1.71        65
16 2000  6.84      1.86        93

然后,您可以使用cor(ie cor(new_df$Advertise, new_df$Employees)) 查找所需的任何列之间的相关性。

注意1:确保您的初始列是一个字符(不是因素)

注意 2:默认情况下,cor函数计算 pearson 相关性。对于 spearman,请添加参数cor(..., method = "spearman"),如 @Base_R_Best_R 所述。

数据

dput(df2)
structure(list(Year.Sales.Advertise.Employees = c("1985 1.05 162 32", 
"1986 1.26 285 47", "1987 1.47 540 23", "1988 2.16 261 68", "1989 1.95 360 32", 
"1990 2.4 690 17", "1991 2.37 495 58", "1992 3.15 948 75", "1993 3.57 720 98", 
"1994 4.41 1.14 43", "1995 4.5 1.395 76", "1996 5.61 1.56 89", 
"1997 5.19 1.38 108", "1998 5.67 1.26 76", "1999 5.16 1.71 65", 
"2000 6.84 1.86 93")), class = "data.frame", row.names = c(NA, 
-16L))

推荐阅读