我正在尝试将每个预测转换为N列向量。即 说我的预测集是3个级别的因子,我想将每个预测写为3的向量。
我的当前输出是
Id Prediction
1 Prediction 1
2 prediction 2
3 prediction 3
以及我想要实现的目标
Id Prediction1 Prediction2 Predication3
1 0 0 1
2 1 0 0
在R中实现这一目标的简单方法是什么?
答案 0 :(得分:1)
看起来你想要执行所谓的"一个热编码"通过引入虚拟变量来预测因子变量。一种方法是使用caret包。
假设您有这样的数据框:
> df <- data.frame(Id = c(1, 2, 3, 4), Prediction = c("Prediction 3", "Prediction 1", "Prediction 2", "Prediction 3"))
> df
Id Prediction
1 1 Prediction 3
2 2 Prediction 1
3 3 Prediction 2
4 4 Prediction 3
首先确保已安装并加载插入符号包。
> install.packages('caret')
> library(caret)
然后,您可以使用插入符的dummyVars()函数来创建虚拟变量。
> dummies <- dummyVars( ~ Prediction, data = df, levelsOnly = TRUE)
dummyVars()的第一个参数,一个公式,告诉它为日期帧df中的预测因子生成虚拟变量。 (levelsOnly = TRUE从列名中剥离变量名,只留下级别,在这种情况下看起来更好。)
然后可以将虚拟变量传递给predict()函数以生成具有一个热编码因子的矩阵。
> encoded <- predict(dummies, df)
> encoded
Prediction 1 Prediction 2 Prediction 3
1 0 0 1
2 1 0 0
3 0 1 0
4 0 0 1
然后,您可以使用编码变量而不是原始因子变量创建新数据框:
> data.frame(Id = df$Id, encoded)
Id Prediction.1 Prediction.2 Prediction.3
1 1 0 0 1
2 2 1 0 0
3 3 0 1 0
4 4 0 0 1
这种技术很容易归结为数值和分类变量的混合。这是一个更为一般的例子:
> df <- data.frame(Id = c(1,2,3,4), Var1 = c(3.4, 2.1, 6.0, 4.7), Var2 = c("B", "A", "B", "A"), Var3 = c("Rainy", "Sunny", "Sunny", "Cloudy"))
> dummies <- dummyVars(Id ~ ., data = df)
> encoded <- predict(dummies, df)
> encoded
Var1 Var2.A Var2.B Var3.Cloudy Var3.Rainy Var3.Sunny
1 3.4 0 1 0 1 0
2 2.1 1 0 0 0 1
3 6.0 0 1 0 0 1
4 4.7 1 0 1 0 0
所有数值变量保持不变,而所有分类变量都被编码。这种情况很有用的典型情况是为机器学习算法准备数据,该算法只接受数值变量,而不是分类变量。
答案 1 :(得分:0)
您可以使用以下内容:
as.numeric(data[1,][2:4])
其中“1”是您要转换为矢量的行号。
答案 2 :(得分:0)
采取WhiteViking的开始和使用表函数似乎工作。
> df <- data.frame(Id = c(1, 2, 3, 4), Prediction = c("Prediction 3", "Prediction 1", "Prediction 2", "Prediction 3"))
> df
Id Prediction
1 1 Prediction 3
2 2 Prediction 1
3 3 Prediction 2
4 4 Prediction 3
> table(df$Id, df$Prediction)
Prediction 1 Prediction 2 Prediction 3
1 0 0 1
2 1 0 0
3 0 1 0
4 0 0 1
答案 3 :(得分:0)
我会使用reshape
函数