小编JS1*_*204的帖子

data.table 切换列名

我想问一下以下行为data.table是功能还是错误。

鉴于 data.table

dt = data.table(
  group = c(rep('group1',5),rep('group2',5)),
  x = as.numeric(c(1:5, 1:5)),
  y = as.numeric(c(5:1, 5:1)),
  z = as.numeric(c(1,2,3,2,1, 1,2,3,2,1))
)
Run Code Online (Sandbox Code Playgroud)

以及包含重复项的列名向量,

cols = c('y','x','y','z') # contains a duplicate column name
Run Code Online (Sandbox Code Playgroud)

data.table 正确地阻止我为重复的列名分配值:

dt[,(cols) := lapply(.SD,identity), .SDcols=cols] # Error (OK)
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是合适的行为,因为它可以帮助避免意外后果。但是,如果我按组做相同的作业,

dt[,(cols) := lapply(.SD,identity), .SDcols=cols, by=group] # No error!
Run Code Online (Sandbox Code Playgroud)

然后data.table不会抛出错误。分配通过,并且可以验证列yz已互换。

这对我来说发生在一个大型应用程序中,同时按组贬低变量,并且很难追踪这种行为的来源。对用户的建议当然是在分配时避免重复列名,并避免向.SDcols. 但是,data.table在这种情况下抛出错误不是更好吗?

r data.table

6
推荐指数
1
解决办法
55
查看次数

使用大小映射和density2d的不寻常的图例

我试图在ggplot2中制作一个散点图,其大小映射到第三个变量和density2d轮廓.似乎传说因包含density2d轮廓而感到困惑.

例如,以下代码有效:

library('ggplot2')
set.seed(1)
x=rnorm(100); y=rnorm(100,sd=10); z=seq(1,10,length.out=100)
dd=data.frame(x=x,y=y,z=z)
ggplot(dd,aes(x,y,size=z))+geom_point()
Run Code Online (Sandbox Code Playgroud)

情节看起来很正常

但现在,请注意,当我添加一个调用时,图例表现异常stat_density2d().特别是,图例显示蓝色块而不是黑色圆圈:

ggplot(dd,aes(x,y,size=z))+geom_point()+stat_density2d()
Run Code Online (Sandbox Code Playgroud)

情节图例显示蓝色块而不是黑色圆圈

r ggplot2

5
推荐指数
1
解决办法
581
查看次数

标签 统计

r ×2

data.table ×1

ggplot2 ×1