R:在data.table

时间:2018-01-25 12:03:39

标签: r data.table data-manipulation

在R中的data.table包中,有一种方法可以在' by'中使用字符向量。计算声明?

以下是使用mtcars从中获得所需输出的示例:

    mtcars <- data.table(mtcars)
 ColSelect <- 'cyl' # One Column Option
 mtcars[,.( AveMpg = mean(mpg)), by = .(ColSelect)] # Doesn't work

 # Desired Output 
    cyl   AveMpg
 1:   6 19.74286
 2:   4 26.66364
 3:   8 15.10000

我知道可以通过将括号括在括号内来在J节中分配列名。

 ColSelect <- 'AveMpg' # Column to be assigned for average mpg value
 mtcars[,(ColSelect):= mean(mpg), by = .(cyl)]
 head(mtcars)

    mpg cyl disp  hp drat    wt  qsec vs am gear carb   AveMpg
1: 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 19.74286
2: 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 19.74286
3: 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 26.66364
4: 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 19.74286
5: 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 15.10000
6: 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 19.74286

是否有关于将什么放入&#39; by&#39;的建议?部分为了实现这个目标? 感谢。

2 个答案:

答案 0 :(得分:1)

尝试像这样使用它

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" >


<button id="addEnv">Add</button>
<div id="envVariablesDiv">

</div>

答案 1 :(得分:0)

?data.table部分的by表示by接受:

  
      
  • 包含逗号分隔列名的单个字符串(其中空格很重要,因为列名可能包含空格
      甚至在开始或结束时):例如,DT [,sum(a),by =“x,y,z”]
  •   
  • 列名的字符向量:例如,DT [,sum(a),by = c(“x”,“y”)]
  •   

是的,您可以在@ cccmir的回复中使用答案。您也可以使用c()作为@akrun提到,但这似乎有点无关紧要,除非您想要多列。

您无法使用.()语法的原因是data.table .()中的list()是别名by。根据{{​​1}}的相同帮助,list()语法需要表达列名 - 而不是字符串。

如果您想使用多个变量并将名称作为字符传递,请取消by帮助中的示例:

  1. mtcars[,.( AveMpg = mean(mpg)), by = "cyl,am"]
  2. mtcars[,.( AveMpg = mean(mpg)), by = c("cyl","am")]