从列表中减去R中的每个正确的列数据帧

时间:2018-02-14 01:53:10

标签: r dataframe apply

我有以下名为diamonds的数据框。

  X carat       cut color clarity depth table price     x     y    z
 26450  1.53     Ideal     G    VVS1  61.8  55.0 15992  7.43  7.45 4.59
 27696  0.40     Ideal     G     SI2  62.1  57.0   648  4.72  4.75 2.94
  3596  0.90      Good     J     VS2  62.3  64.0  3423  6.09  6.17 3.82
 45732  0.70      Good     I     SI2  63.4  59.0  1699  5.66  5.57 3.56
 25894  1.50 Very Good     F     VS1  61.6  58.0 15022  7.35  7.43 4.55
  4169  1.04     Ideal     I     SI2  61.9  56.0  3553  6.51  6.45 4.02
  7721  0.26     Ideal     F     VS1  60.9  57.0   580  4.13  4.11 2.51
   202  0.70   Premium     E     SI1  61.3  58.0  2777  5.71  5.68 3.49
  8730  0.27      Good     E    VVS1  63.9  57.0   586  4.07  4.10 2.61
 20109  1.50     Ideal     G     SI2  61.4  56.0  8580  7.34  7.38 4.52

我根据我的钻石数据框创建了2个新数据框,其中一个将有70%的数据称为train,另一个将拥有其他30%的数据,test数据框

通过以下两个功能,我从" train"中获得列均值和方差的列表。数据帧。

meanTrain <- lapply(train[,nums],mean)
varianceTrain<- lapply(train[,nums],sd)

现在我要做的是规范我的test数据框。

为此,我必须从test数据框中减去所有数字列(以选择数字列 - &gt; test [,nums])

来自train数据框的均值,并将其除以train数据框差异。

我一直在考虑它,这是我的代码。

escaladeTest <- apply(test[, nums], 2, function (col) (col - meanTrain[col])/varianceTrain[col])

它无法正常工作,但它了解了如何为每个test数据框列,它必须被减去并除以均值和方差&#34; train& #34;数据框。

1 个答案:

答案 0 :(得分:2)

看到你所描述的内容,我认为以下是实现目标的一种方法。您想要处理数字列。因此,您选择diamonds1diamonds1。对于每个数字列,您要在.中减去具有相同列名的列的平均值。然后,您希望将值除以is.numeric中相同列的sd。

.基本上是.中TRUE的列。如果有五列符合逻辑条件,则carat将填充每列。例如,如果.表示.,则所有library(dplyr) library(ggplot2) # I created two data sets from the diamonds data set in ggplot2 diamonds1 <- diamonds[1:10000, ] diamonds2 <- diamonds[10001:15000, ] mutate_if(diamonds2, is.numeric, funs((. - mean(diamonds1$., na.rm = T)) / sd(diamonds1$.))) carat cut color clarity depth table price x y z <dbl> <ord> <ord> <ord> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0.664 Fair D SI1 2.45 -1.63 1.17 0.390 0.333 0.963 2 0.707 Very Good H SI1 0.751 0.502 1.17 0.543 0.691 0.794 3 0.793 Good H SI1 -1.56 -0.777 1.17 0.896 1.05 0.528 4 1.61 Fair F SI2 1.91 -0.777 1.17 1.11 1.27 1.66 5 0.277 Ideal E SI1 -0.525 -0.351 1.17 0.436 0.520 0.334 6 0.707 Premium E VS2 -0.646 0.0755 1.17 0.681 0.645 0.479 7 0.234 Very Good E VS2 -0.889 0.928 1.17 0.374 0.473 0.189 8 0.234 Very Good E VS2 0.204 -0.777 1.17 0.206 0.286 0.286 9 0.234 Very Good E VS2 0.690 0.0755 1.17 0.221 0.270 0.407 10 0.707 Very Good G SI1 0.326 0.928 1.17 0.543 0.629 0.648 表示一轮中的克拉。然后,{{1}}表示另一列并重复完全相同的计算。

{{1}}