R中的未启用SD会导致输出不正确
我想计算变量的乘积R中的未启用SD会导致输出不正确,r,data.table,R,Data.table,我想计算变量的乘积c(“SA.Dretwdeq”、“SB.Dretwdeq”、“ZA.Dretwdeq”、“ZA.Dretwdeq”)在我的数据集中,我的代码如下: setDT(WC) ## WC is the name of data frame down below : x<-5 interesting.sub.vars<-c("SA.Dretwdeq","SB.Dretwdeq","ZA.Dretwdeq","ZA.Dretwdeq") anscol.s
c(“SA.Dretwdeq”、“SB.Dretwdeq”、“ZA.Dretwdeq”、“ZA.Dretwdeq”)
在我的数据集中,我的代码如下:
setDT(WC) ## WC is the name of data frame down below :
x<-5
interesting.sub.vars<-c("SA.Dretwdeq","SB.Dretwdeq","ZA.Dretwdeq","ZA.Dretwdeq")
anscol.sub = paste0('subBHR0',x,interesting.sub.vars)
WC[,(anscol.sub) := prod(.SD,na.rm = TRUE), .SDcols=interesting.sub.vars, by = Stkcd]
setDF(WC)
prod(WC[WC$Stkcd==12,]$SA.Dretwdeq) #### calculated by hand
WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq #### calculated by the code above
然后prod(WC[WC$Stkcd==12,]$SA.Dretwdeq)-WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq
将等于0
有人知道我错过了什么吗???我花了整个下午,但还是找不到出路
structure(list(Stkcd = c(600773L, 2055L, 600550L, 600101L, 600232L,
584L, 600979L, 600270L, 600596L, 600089L, 778L, 600507L, 510L,
600236L, 200521L, 2145L, 600331L, 521L, 600877L, 600109L, 593L,
12L, 607L, 600378L, 2190L, 903L, 600702L, 935L, 2192L, 600615L,
600880L, 837L, 600379L, 600358L, 600718L, 600353L, 2143L, 601857L,
600644L, 900935L, 731L, 569L, 200012L, 600543L, 878L, 600456L,
810L, 2122L, 586L, 600131L, 876L, 600321L, 600875L, 606L, 519L,
600448L, 600391L, 600839L, 600490L, 2023L, 601186L, 591L, 600674L,
600074L, 2024L, 790L, 2066L, 2154L, 539L, 600073L, 600068L, 200012L,
584L, 600839L, 600068L, 2190L, 600131L, 606L, 600232L, 519L,
600877L, 600270L, 2055L, 601186L, 935L, 600073L, 600358L, 607L,
601857L, 600236L, 600456L, 12L, 600378L, 591L, 2023L, 2143L,
200521L, 600979L, 600507L, 903L), SA.Dretwdeq = c(-0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282,
-0.000178999995114282, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716,
0.0188650004565716, 0.0188650004565716, 0.0188650004565716),
SB.Dretwdeq = c(-0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
-0.00631299987435341, -0.00631299987435341, -0.00631299987435341,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219, 0.00821300037205219,
0.00821300037205219, 0.00821300037205219), ZA.Dretwdeq = c(0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603
), ZA.Dretwdeq.1 = c(0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.000387000007322058, 0.000387000007322058, 0.000387000007322058,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603, 0.0239070001989603,
0.0239070001989603, 0.0239070001989603)), .Names = c("Stkcd",
"SA.Dretwdeq", "SB.Dretwdeq", "ZA.Dretwdeq", "ZA.Dretwdeq.1"), row.names = c(NA,
100L), class = "data.frame")
我们需要使用
lappy
遍历列,并将其分配给新列
interesting.sub.vars <- names(WC)[-1] #interesting.sub.vars had different column names
anscol.sub = paste0('subBHR0',x,interesting.sub.vars)
setDT(WC)[, (anscol.sub) := lapply(.SD, prod, na.rm = TRUE) ,
.SDcols = interesting.sub.vars, by = Stkcd]
interest.sub.vars感谢您的回复,并对混淆表示抱歉,x只是我在以前代码中使用的一个数字,无论如何,我都会更新它。我运行了您的代码,但它给了我错误:在[.data.table
(setDT(WC),:=
((anscol.sub),lappy(.SD,prod)),:要替换的项目数不是替换长度的倍数您是否使用了na.rm=TRUE
I add na.rm=TRUE,但仍然不正确,我只是检查了所有四个新变量,只有第一个变量在prod之间有“间隙”(WC[WC$Stkcd==12,]$SA.Dretwdeq)-WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq。其他三个是fine@JasonGoal您有不同的列名,而有趣。sub.vars
有重复的名称
interesting.sub.vars <- names(WC)[-1] #interesting.sub.vars had different column names
anscol.sub = paste0('subBHR0',x,interesting.sub.vars)
setDT(WC)[, (anscol.sub) := lapply(.SD, prod, na.rm = TRUE) ,
.SDcols = interesting.sub.vars, by = Stkcd]