Chr*_* P. 3 loops regression r dataset
我目前正在处理一个大型数据集(约 30k 行),并且正在创建回归hedonic。下一步是创建每周虚拟变量。
现在,我的数据已根据测量数据的日期指定了每周编号。有 50 个不同的周(1-52,2 个失踪下落不明)。这些每周的数字会重复,直到大约之后发生变化10 rows,,但它们也会重复出现,因为新产品类别是衡量标准。数据集中有 132 个可用的类别,其中一个类别包含介于 之间的类别100 - 300 rows。
这是数据集的示例
UPC Weeks
1111112016 1
1111112016 1
1111112016 2
1111112016 2
1111112016 3
1111112016 3
1111112440 1
1111112440 1
1111112440 2
1111112440 2
1111112440 3
1111112440 3
Run Code Online (Sandbox Code Playgroud)
现在为了创建虚拟变量,我创建了 50 列,每列大约有 30k 行来表示数据集。每当虚拟周(因此列名称)和真实周(原始数据集的行)相等时,我想将 1 分配给虚拟周的行。
虚拟示例(DW = 虚拟周):
DW1 DW2
NA NA
NA NA
NA NA
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
for (i in 1:seq(Soap$WEEK)){
if Soap$WEEK[i] == seq(from=1, by=1, to=52){
for (j in names(x)){
x$DW[[j]] = 1
else {
x$DW[[j]] = 0
}}}}
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的,但我无法解决我的问题。我将不胜感激在此事上的任何帮助。
我们可以使用包model.matrix()中的stats内容来模拟您的数据。首先,我们需要转换Weeks为factor列。
df$Weeks <- as.factor(df$Weeks)
Run Code Online (Sandbox Code Playgroud)
现在我们可以运行model.matrix():
model.matrix(~ Weeks + UPC + 0, data = df)
# Weeks1 Weeks2 Weeks3 UPC
#1 1 0 0 1111112016
#2 1 0 0 1111112016
#3 0 1 0 1111112016
#4 0 1 0 1111112016
#5 0 0 1 1111112016
#6 0 0 1 1111112016
#7 1 0 0 1111112440
#8 1 0 0 1111112440
#9 0 1 0 1111112440
#10 0 1 0 1111112440
#11 0 0 1 1111112440
#12 0 0 1 1111112440
Run Code Online (Sandbox Code Playgroud)
您也可以只使用model.matrix(~ . + 0 , data = df),因为数字列将被自动传递。公式+ 0中的 避免用 替换第一级Intercept。要查看差异,请尝试在没有0.
或者,您也可以使用包装dummyVars中的caret产品。在这里,no Intercept是默认行为:
library(caret)
dm <- dummyVars(" ~ .", data = df)
data.frame(predict(dm, newdata = df))
# UPC Weeks.1 Weeks.2 Weeks.3
#1 1111112016 1 0 0
#2 1111112016 1 0 0
#3 1111112016 0 1 0
#4 1111112016 0 1 0
#5 1111112016 0 0 1
#6 1111112016 0 0 1
#7 1111112440 1 0 0
#8 1111112440 1 0 0
#9 1111112440 0 1 0
#10 1111112440 0 1 0
#11 1111112440 0 0 1
#12 1111112440 0 0 1
Run Code Online (Sandbox Code Playgroud)