我希望使用Pyspark语法将我的分类变量伪编码为数字变量,如下图所示。
我读了这样的数据
data = sqlContext.read.csv("data.txt", sep = ";", header = "true")
Run Code Online (Sandbox Code Playgroud)
在python中,我可以使用以下代码对变量进行编码
data = pd.get_dummies(data, columns = ['Continent'])
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何在Pyspark中做到这一点。
任何帮助将不胜感激。
test = {'ngrp' : ['Manhattan', 'Brooklyn', 'Queens', 'Staten Island', 'Bronx']}
test = pd.DataFrame(test)
dummy = pd.get_dummies(test['ngrp'], drop_first = True)
Run Code Online (Sandbox Code Playgroud)
这给了我:
Brooklyn Manhattan Queens Staten Island
0 0 1 0 0
1 1 0 0 0
2 0 0 1 0
3 0 0 0 1
4 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我将获得Bronx作为我的参考水平(因为这是删除的东西),如何更改它以指定应该将曼哈顿作为我的参考水平?我的预期输出是
Brooklyn Queens Staten Island Bronx
0 0 0 0 0
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 R 中的 Stargazer 包创建一个回归表。我有几个仅在虚拟变量上有所不同的回归。我希望它报告自变量、常数等的系数,并在回归中包含某些固定效应(即虚拟变量)时说“是”或“否”。这些是我的回归:
iv1 <- ivreg(data=merge1,log(total_units)~log(priceIndex)|log(taxIndex))
iv2 <- ivreg(data=merge1,log(total_units)~log(priceIndex)+factor(fips_state_code)|log(taxIndex)+factor(fips_state_code))
iv4 <- ivreg(data=merge1,log(total_units)~log(priceIndex)+factor(fips_state_code) +factor(year)|log(taxIndex)+factor(fips_state_code) +factor(year))
iv5 <- ivreg(data=merge1,log(total_units)~log(priceIndex)+factor(fips_state_code) +time*factor(fips_state_code)|log(taxIndex)+factor(fips_state_code) +time*factor(fips_state_code))
Run Code Online (Sandbox Code Playgroud)
(顺便说一下,数据框代码位于底部。)
如您所见,iv1 没有虚拟对象。iv2 有状态虚拟。iv4 有州和年份虚拟变量。iv5 有状态虚拟人和时间趋势虚拟人。
我希望回归只是报告是否包含每个虚拟变量,而不是报告所有这些虚拟变量的贝塔值。出于某种原因,我可以使用 Stargazer 让它适用于每个单独的回归,如下所示:
> stargazer(iv1,type="text",
+ omit = c("fips_state_code","year","time"),
+ omit.labels = c("State FE?","Year FE?","State time trend?"))
===============================================
Dependent variable:
---------------------------
log(total_units)
-----------------------------------------------
log(priceIndex) 1.146
(1.481)
Constant -0.283
(3.576)
-----------------------------------------------
State FE? No
Year FE? No
State time trend? No
-----------------------------------------------
Observations 189
R2 -1.347
Adjusted R2 -1.359
Residual Std. Error 1.297 (df …
Run Code Online (Sandbox Code Playgroud) 我有一个数据表,我想为每个唯一的日创建一个新列,然后在每一行中为每天匹配列名称分配1
我使用for循环完成了这个,但我想知道是否有任何方法使用data.table和set来优化它?
这是一个例子
dt <- data.table(Week_Day = c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"))
Day <- unique(dt$Week_Day)
for (i in 1:length(Day)) {
if (Day[i] != "Sunday") {
dt[, Day[i] := ifelse(Week_Day == Day[i], 1, 0)]
}
}
Run Code Online (Sandbox Code Playgroud)
我的表是298k行,虽然它不需要很长时间执行(下面),它是一个长脚本的一部分,我有相当多的低效循环,所以我试图让整个运行时间缩短.
运行时间:
user system elapsed
0.99 0.06 1.05
Run Code Online (Sandbox Code Playgroud)
提前致谢.
I have a DataFrame with an ID variable and another categorical variable. I want to create dummy variables out of the categorical variable with get_dummies.
dum = pd.get_dummies(df)
Run Code Online (Sandbox Code Playgroud)
However, this makes the ID variable disappear. And I need this ID variable later on to merge to other data sets.
Is there a way to keep other variables. In the documentation of get_dummies I could not find anything. Thanks!
我有一个具有以下结构的数据帧
test <- data.frame(col = c('a; ff; cc; rr;', 'rr; a; cc; e;'))
Run Code Online (Sandbox Code Playgroud)
现在我想从中创建一个数据帧,其中包含测试数据帧中每个唯一值的命名列.唯一值是以';'结尾的值 角色,从空间开始,不包括空间.然后,对于列中的每一行,我希望用1或0填充虚拟列.如下所示
data.frame(a = c(1,1), ff = c(1,0), cc = c(1,1), rr = c(1,0), e = c(0,1))
a ff cc rr e
1 1 1 1 1 0
2 1 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
我尝试使用for循环和列中的唯一值创建一个df,但它变得很乱.我有一个可用的向量,包含列的唯一值.问题是如何创建1和0.我尝试了一些mutate_all()
功能,grep()
但这没用.
我是 R 新手,我正在尝试对我的数据集进行回归,其中包括一家公司多年来在不同国家/地区的月度销售数据。
在其他统计程序中,为了控制销售的季度周期性变动以及区域(国家)差异,我将创建虚拟变量来指示例如进行销售的季度和国家。
我的问题:
1)我看到在 R 中你可以将变量类型设置为“Factor”。在这种情况下,我是否仍然需要创建指示国家和月份/季度的虚拟变量,或者 R 是否已经以不同方式处理因子变量并在后台自动将它们转换为虚拟变量?
2)如果上述情况并非如此,并且我确实需要将我的值重新编码为0,1虚拟值,那么R中有一个简洁的标准方法可以做到这一点吗?
非常感谢您的帮助,祝您有美好的一天!
特尔戈韦茨
我想使用dplyr创建7个虚拟变量-每天创建一个
到目前为止,我已经设法使用sjmisc
包和to_dummy
函数来完成此操作,但是我分两个步骤进行了操作-1。创建虚拟变量的df,2)附加到原始df
#Sample dataframe
mydfdata.frame(x=rep(letters[1:9]),
day=c("Mon","Tues","Wed","Thurs","Fri","Sat","Sun","Fri","Mon"))
#1.Create the 7 dummy variables separately
daysdummy<-sjmisc::to_dummy(mydf$day,suffix="label")
#2. append to dataframe
mydf<-bind_cols(mydf,daysdummy)
> mydf
x day day_Fri day_Mon day_Sat day_Sun day_Thurs day_Tues day_Wed
1 a Mon 0 1 0 0 0 0 0
2 b Tues 0 0 0 0 0 1 0
3 c Wed 0 0 0 0 0 0 1
4 d Thurs 0 0 0 0 1 0 0
5 e Fri 1 0 0 0 …
Run Code Online (Sandbox Code Playgroud) 我想让每个唯一值获得虚拟变量。想法是将数据框变成多标签目标。我该怎么做?
数据:
ID L2
A Firewall
A Security
B Communications
C Business
C Switches
Run Code Online (Sandbox Code Playgroud)
期望输出:
ID Firewall Security Communications Business Switches
A 1 1 0 0 0
B 0 0 1 0 0
C 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我试过,pd.pivot_table
但它需要一个列来聚合。我也试过这个链接的答案,但它对值求和而不是仅仅变成二进制虚拟列。我将非常感谢您的帮助。非常感谢!
我正在尝试使用 R 包构建不同的回归模型caret
。对于数据来说,它既包括数值,也包括因子。
问题 1: 在回归模型中同时包含数值和因子的正确方法是什么caret
?
问题2:回归模型通常需要进行数据预处理(中心和尺度),那么因子的预处理如何进行?
library(caret)
data("mtcars")
mydata = mtcars[, -c(8,9)]
set.seed(100)
mydata$dir = sample(x=c("N", "E", "S", "W"), size = 32, replace = T)
mydata$dir = as.factor(mydata$dir)
class(mydata$dir) # Factor with four levels
MyControl = trainControl(
method = "repeatedcv",
number = 5,
repeats = 2,
verboseIter = TRUE,
savePredictions = "final"
)
model_glm <- train(
hp ~ .,
data = mydata,
method = "glm",
metric = "RMSE",
preProcess = c('center', 'scale'),
trControl …
Run Code Online (Sandbox Code Playgroud) dummy-variable ×10
r ×6
pandas ×3
regression ×2
apache-spark ×1
data.table ×1
dataframe ×1
dplyr ×1
encoding ×1
model.matrix ×1
performance ×1
pivot-table ×1
pyspark ×1
python ×1
python-2.7 ×1
python-3.x ×1
r-caret ×1
stargazer ×1