我需要找到一些功能:{magic_function_1
,magic_function_2
}或类似的功能才能实现以下内容。
假设我们具有此辅助功能:
my.normalize = function(vec){
if (is.numeric(vec)) {
vec = (vec - min(vec)) / (max(vec) - min(vec))
}
return (vec)
}
初始数据集:
ds_1 = data.frame(
score = c(142, 89, 540, 38, 232, 142),
age = c(20, 18, 76, 54, 15, 22),
points = c(4, 50, 100, 10, 9, 35),
group = c("A", "B", "A", "A", "C", "B"),
favoritedrink = c("Coke", "Water", "Water", "Wine", "Tea", "Coke"),
type = c("1", "2", "3", "1", "2", "1")
)
ds_1
## score age points group favoritedrink type
## 1 142 20 4 A Coke 1
## 2 89 18 50 B Water 2
## 3 540 76 100 A Water 3
## 4 38 54 10 A Wine 1
## 5 232 15 9 C Tea 2
## 6 142 22 35 B Coke 1
我要模拟的东西:
ds_2 = mutate_if(ds_1, is.numeric, my.normalize)
ds_3 = data.frame(model.matrix(~ score + age + points + group + favoritedrink + type, data = ds_2))[, -1]
ds_3
## score age points groupB groupC favoritedrinkTea
## 1 0.2071713 0.08196721 0.00000000 0 0 0
## 2 0.1015936 0.04918033 0.47916667 1 0 0
## 3 1.0000000 1.00000000 1.00000000 0 0 0
## 4 0.0000000 0.63934426 0.06250000 0 0 0
## 5 0.3864542 0.00000000 0.05208333 0 1 1
## 6 0.2071713 0.11475410 0.32291667 1 0 0
## favoritedrinkWater favoritedrinkWine type2 type3
## 1 0 0 0 0
## 2 1 0 1 0
## 3 1 0 0 1
## 4 0 1 0 0
## 5 0 0 1 0
## 6 0 0 0 0
例如,我正在寻找一些魔术功能:magic_function_1
以实现以下目标:
ds_3 = magic_function_1(ds_1)
# where that magic function also saves the following config:
ds_3.config = [saved config to convert future values with same parameters]
其中ds_3
应该与前面显示的表/输出相同,而ds_3.config
是使转换成为可能的配置。以后可以使用此配置进行转换,以保持相同的比例/参数/等。例如,可以在该配置内部存储数字变量的最小/最大值,或分类变量的可能值,等等。 / p>
如果将来,请输入以下内容:
input = ds_1[5,]
rownames(input) = NULL # just resetting the row indexes
input
位于初始表上,那么我们得到以下信息:
out_1 = magic_function_2(input, ds_3.config)
all(out_1 == ds_3[5,]) == TRUE # in other words: out_1 should be equals to ds_3[5,] which is the corresponding row after normalization
此外,当使用ds_1
上不需要的其他任何输入时,例如:
input = data.frame(
score = 100,
age = 16,
points = 73,
group = "C",
favoritedrink = "Water",
type = "2"
)
当我们打电话时:
out_2 = magic_function_2(input, ds_3.config)
然后,在out_2
上,数字值应根据ds_3.config
进行适当缩放,并相应地转换分类值(如您在上面第二张表中所见)。
另一方面,如果我们传递了原始数据集ds_1
以外的某些分类值,例如:
input = data.frame(
score = 100,
age = 16,
points = 73,
group = "C",
favoritedrink = "Rum",
type = "2"
)
当我们打电话时:
out_3 = magic_function_2(input, ds_3.config)
然后,我们将得到一个错误,因为Rum
不在初始数据集中。