我不明白我如何根据多个键进行过滤data.table
.采用内置mtcars
数据集.
DT <- data.table(mtcars)
setkey(DT, am, gear, carb)
Run Code Online (Sandbox Code Playgroud)
在小插图之后,我知道如果我想要过滤相应的am == 1 & gear == 4 & carb == 4
,我可以说
> DT[.(1, 4, 4)]
mpg cyl disp hp drat wt qsec vs am gear carb
1: 21 6 160 110 3.9 2.620 16.46 0 1 4 4
2: 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Run Code Online (Sandbox Code Playgroud)
它给出了正确的结果.此外,如果我想拥有am == 1 & gear == 4 & (carb == 4 | carb …
我试图了解从中生成的样本的直方图的特定行为rnorm
.
set.seed(1)
x1 <- rnorm(1000L)
x2 <- rnorm(10000L)
x3 <- rnorm(100000L)
x4 <- rnorm(1000000L)
plot.hist <- function(vec, title, brks) {
h <- hist(vec, breaks = brks, density = 10,
col = "lightgray", main = title)
xfit <- seq(min(vec), max(vec), length = 40)
yfit <- dnorm(xfit, mean = mean(vec), sd = sd(vec))
yfit <- yfit * diff(h$mids[1:2]) * length(vec)
return(lines(xfit, yfit, col = "black", lwd = 2))
}
par(mfrow = c(2, 2))
plot.hist(x1, title = 'Sample = 1E3', brks …
Run Code Online (Sandbox Code Playgroud) 我想绘制多个图,所有图都具有相同的 X 轴。
其中一个图在开始时有一些缺失值(根据定义,就像移动平均数据一样)。
为了便于比较,我希望所有图的 X 轴起点都相同。
这是一个可重现的示例 -
library(plotly)
plotdata <- data.frame(Month=as.POSIXct(c(1309435200, 1312113600, 1314792000, 1317380400, 1320058800,
1322650800, 1325329200, 1328007600, 1330513200, 1333191600, 1335787200,
1338465600, 1341057600, 1343736000, 1346414400, 1349002800, 1351681200,
1354273200, 1356951600, 1359630000, 1362049200, 1364727600, 1367323200,
1370001600, 1372593600, 1375272000, 1377950400, 1380538800, 1383217200,
1385809200, 1388487600, 1391166000, 1393585200, 1396263600, 1398859200,
1401537600, 1404129600, 1406808000, 1409486400, 1412074800, 1414753200,
1417345200, 1420023600, 1422702000, 1425121200, 1427799600, 1430395200,
1433073600, 1435665600, 1438344000, 1441022400, 1443610800, 1446289200,
1448881200, 1451559600, 1454238000, 1456743600, 1459422000, 1462017600,
1464696000, 1467288000, 1469966400, 1472644800, 1475233200, 1477911600,
1480503600, 1483182000, 1485860400, …
Run Code Online (Sandbox Code Playgroud) 首先,一个可重现的例子。我正在使用 data.table 因为我正在处理大约 2000 万行 -
> require(data.table)
> x <- structure(list(DoM = c(2011241L, 2015359L, 2016352L, 2015360L,
2015287L, 2014038L, 2017066L, 2012227L, 2015041L, 2015295L),
Year = c(2011L, 2015L, 2016L, 2015L, 2015L, 2014L, 2017L,
2012L, 2015L, 2015L), Month = c(8L, 12L, 12L, 12L, 10L, 2L,
3L, 8L, 2L, 10L)), .Names = c("DoM", "Year", "Month"), row.names = c(NA,
-10L), class = c("data.table", "data.frame"))
> x
DoM Year Month
1: 2011241 2011 8
2: 2015359 2015 12
3: 2016352 2016 12
4: 2015360 2015 …
Run Code Online (Sandbox Code Playgroud) 考虑以下 -
set.seed(1)
x <- runif(100)
y <- sample(c('M', 'F', 'D'), 100, TRUE)
aveResult <- ave(x = x, y, FUN = sum)
tapplyResult <- tapply(x, y, sum)
aveResult <- setNames(aveResult, y)
tapplyResult
aveResult[!duplicated(names(aveResult))]
Run Code Online (Sandbox Code Playgroud)
除了输出的长度不同外,这两个函数的结果是相同的。此外,在这种情况下,这也会造成混乱(由于回收而加剧)。
有没有一个例子,其中一个功能可以做另一个不能做的事情?