来自这样的数据框架
test <- data.frame('id'= rep(1:5,2), 'string'= LETTERS[1:10])
test <- test[order(test$id), ]
rownames(test) <- 1:10
> test
id string
1 1 A
2 1 F
3 2 B
4 2 G
5 3 C
6 3 H
7 4 D
8 4 I
9 5 E
10 5 J
Run Code Online (Sandbox Code Playgroud)
我想用每个id/string对的第一行创建一个新的.如果sqldf在其中接受R代码,则查询可能如下所示:
res <- sqldf("select id, min(rownames(test)), string
from test
group by id, string")
> res
id string
1 1 A
3 2 B
5 3 C
7 4 D
9 5 E …Run Code Online (Sandbox Code Playgroud) 显然在我的上一个问题中,我表现出了data.frame和之间的混淆data.table.不可否认,我没有意识到有区别.
所以我读了每个人的帮助,但是在实际的日常用语中,有什么不同,含义是什么以及每个用于什么会有助于指导我们适当的用法?
我正在尝试使用gWidgetsWWW并遇到一个奇怪的错误.我创建了一个带有处理程序的按钮,用于knit2html报告,该报告使用了data.table赋值运算符":=".报告回来时出现了这个错误:
错误:: =定义仅用于j,并且(当前)仅用于一次; 即,DT [i,col:= 1L]和DT [,newcol:= sum(colB),by = colA]可以,但不是DT [i,col]:= 1L,而不是DT [i] $ col: = 1L而不是DT [,{newcol1:= 1L; newcol2:= 2L}].请参阅帮助(":=").检查is.data.table(DT)是否为TRUE.
该报告直接使用knit2html生成,也通过RStudio的"Knit HTML"按钮生成,所以我不确定为什么它会在处理程序调用knit2html时失败.
这是一个gWidgetsWWW窗口"test_gui.R":
library(gWidgetsWWW)
library(knitr)
w<-gwindow("Test Window")
g<-ggroup(horizontal=F,cont=w)
b<-gbutton("Report Button",cont=g,handler=function(h,...){
knit2html("test_report.Rmd")
localServerOpen("test_report.html")
})
visible(w)<-T
Run Code Online (Sandbox Code Playgroud)
这是一个产生错误的R Markdown Doc示例:
Test Report
===========
```{r test_chunk}
library(data.table)
df<-data.frame(State=rownames(USArrests),USArrests)
data.table(df)[,State:=tolower(State)]
```
Run Code Online (Sandbox Code Playgroud)
不知道为什么,但是当我调用localServerOpen("test_gui.R")并单击按钮时,我收到错误...
有任何想法吗?
我对R来说还是很新的,最近发现了一些我不确定它意味着什么.data.frame并data.table有相同的类型?一个对象可以有多种类型吗?将"汽车"转换data.frame为后data.table,我显然无法应用适用于data.frames和不适用的功能data.table,但class()显示"汽车"仍然是一个data.frame.谁知道为什么?
> class(cars)
[1] "data.frame"
> cars<-data.table(cars)
> class(cars)
[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)