给定一个写入对象rus
并具有 n 列的 csv 表。第一列包含几种类型的产品,每种类型的产品有 10-20 行。在其余列中,您需要(х-а)/(b-a)
为每个产品按函数更改值,其中 x 是该列的具体值,b 和 a 分别是每个产品的最大值和最小值。
例子:
Продукция Год Продано Куплено Ожидается
Томаты 1992 20 30 40
Томаты 1993 50 10 40
Томаты 1994 30 40 60
Огурцы 1992 20 30 40
Огурцы 1993 50 80 10
Огурцы 1994 120 150 40
您需要对每列中每个产品的数据进行标准化,使其看起来像这样(并且是负值\u200b\u200bnormal还是需要乘以-1?
Томаты 1992 0 0.6 0
Томаты 1993 0.5 0 0
Томаты 1994 0.3 1 1
Огурцы 1992 0 0 1
Огурцы 1993 0.3 0.4 0
Огурцы 1994 1 1 1
(对于西红柿,黄瓜有单独的标准化)
1)如何编写一个循环,以便它可以对所有产品的一个产品范围内的特定列中的值进行规范化?
2)是否可以像这样遍历所有列?
假设您的数据位于
data.frame
名为的数据框 ( )中f
:最方便的是不要在那里设置各种循环,而是利用dplyr包提供的机会:
首先,值得单独描述您的规范化函数(也许它的实现在r包系统的深处,但自己编写会更快):
现在一切都准备好了“魔法” dplyr:
这里:
%>%
- 这是posix垂直线“|
”的类似物 - 一个“管道”(“管道”,“管道”),它允许您将数据从一个实体的输出传输到另一个实体的输入;group_by()
- 按指定列分组数据;mutate_at()
— 将指定的函数应用于指定的列。dplyr包的 ps 函数现在自动使用tibble数据类型。如果您需要将结果转换为“数据框”类型,请在“管道”中添加另一个函数调用
as.data.frame
: