我可以向 data.table 添加一个新列,如下所示:
DT = data.table(A=sample(3, 10, TRUE),
B=sample(letters[1:3], 10, TRUE), C=sample(10))
DT[, new:=1:10]
Run Code Online (Sandbox Code Playgroud)
但是有没有一种聪明的方法将其设置为 data.table 的开头?- 我知道我可以用 setcolorder 来做到这一点,但我想避免这种情况。
setcolorder(DT, c("new", "A", "B", "C"))
Run Code Online (Sandbox Code Playgroud) 让我们说我想在sweave中制作一张桌子,像这样:
<<tab2.1 , results = "asis", echo=FALSE, warning=FALSE>>=
library(xtable)
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
print(xtable(df),
rotate.colnames = TRUE)
@
Run Code Online (Sandbox Code Playgroud)
现在,我想在FishBird的年代和左边的自由空间中拥有情节的标签,但没有旋转.我尝试查看xtable手册,但它没有显示如何只旋转一些列名.
让我们做一个data.table:
dt <- data.table(x.1=1:8, x.2=1:8, x.3=2:9, vessel=rep(letters[1:2], each=4), Year=rep(2012:2015, 2))
dt
x.1 x.2 x.3 vessel Year
1: 1 1 2 a 2012
2: 2 2 3 a 2013
3: 3 3 4 a 2014
4: 4 4 5 a 2015
5: 5 5 6 b 2012
6: 6 6 7 b 2013
7: 7 7 8 b 2014
8: 8 8 9 b 2015
Run Code Online (Sandbox Code Playgroud)
我可以使用函数长度和总和来汇总它,以获得每年所有x的总和以及每年独特船只的总和,如下所示:
dt[,
list(
x.1=sum(x.1),
x.2=sum(x.2),
x.3=sum(x.3),
vessels=length(unique(vessel))),
by=list(Year=Year)]
Year x.1 x.2 x.3 vessels
1: 2012 6 …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据表(数百万行),我需要将行减少到每个ID一个.规则是,如果"X"之外的其他艺术作为唯一ID,则应删除X'.但如果唯一身份证中没有其他艺术品,则X应保留.
测试数据集:
dt <- data.table(
ID=c(1,1,1,2,2,3,4,4),
art=c("X", "Y", "X", "X", "X", "X", "Z", "X"),
redskb=c("a", "Y", "a", "b", "b", "c", "k", "n")
)
ID art redskb
1: 1 X a
2: 1 Y Y
3: 1 X a
4: 2 X b
5: 2 X b
6: 3 X c
7: 4 X k
8: 4 Z n
Run Code Online (Sandbox Code Playgroud)
所需输出:
ID art redskb
1: 1 Y Y
2: 2 X b
3: 3 X c
4: 4 Z n
Run Code Online (Sandbox Code Playgroud)
我试过了
unique(dt, …Run Code Online (Sandbox Code Playgroud)