正在练习基本操作并找到一些有趣的东西.
test <- array(0,dim = c(1,26))
colnames(test) <- letters
Run Code Online (Sandbox Code Playgroud)
我期待一个字母作为colname的数组,但事实证明是这样的

第24列的名称无疑是"x",而结果则不是.有趣.埃里克
我有一个序列作为玩具示例。如何确定最长的连续子序列?现在,我可以找到临界点在哪里,如何获得这些值?
DT <- data.table(X = c(3:7, 16:18, 22:29, 31:36))
DT[,Y:=(shift(.SD,type = "lag", fill = -1))][,Y:= Y-X]
with(DT, which(Y !=-1))
Run Code Online (Sandbox Code Playgroud)
我希望找到的是子序列的值,在这种情况下,应为 c(22, 23, 24, 25, 26, 27, 28, 29)
我需要从外部加载许多 rds 文件,为了让事情变得更顺畅,我倾向于在对象上设置 DT。
是否可以一次设置所有的DT?我试过:
lapply(ls(), setDT)
lapply(list(ls()), setDT)
for(i in ls()) setDT(i)
#Error in FUN(X[[i]], ...) :
# Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'
Run Code Online (Sandbox Code Playgroud)
结果都是一样的。有没有更优雅的方法来做到这一点?
ps 一位朋友建议使用do.call:
do.call(setDT, list("A", "B", "C"))
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
data.table 使用链式规则优雅而直观。一切都像机器一样排列整齐。但有时我们不得不引入一些像dcast或熔化这样的操作。如何将所有操作集成到[]? 我承认,仅仅是因为它更优雅。
DT <- data.table(A = rep(letters[1:3],4), B = rep(1:4,3), C = rep(c("OK", "NG"),6))
DT.1 <- DT[,.N, by = .(B,C)] %>% dcast(B~C)
DT.2 <- DT.1[,.N, by = .(NG)]
# NG N
#1: NA 2
#2: 3 2
#same
DT <- data.table(A = rep(letters[1:3],4), B = rep(1:4,3), C = rep(c("OK", "NG"),6))[,.N, by = .(B, C)] %>%
dcast(B~C) %>% .[,.N, by =.(NG)]
Run Code Online (Sandbox Code Playgroud)
我可以删除%>%并集成到 中[]吗?谢谢
我有一个如下的数字向量。
V1 <- c(1:3, 7:20, 23,45,55,27:30, 66, 88:89)
Run Code Online (Sandbox Code Playgroud)
如何找到最长的连续序列和位置?在这种情况下,所述靶序列的长度是14与该位置是18
请告知
我的丑是使用which和shift
V1 <- c(1:3, 7:20, 23,45,55,27:30, 66, 88:89)
V2 <- c(1, which(V1-shift(V1)!=1)
max(V2-shift(V2, fill =0))
Run Code Online (Sandbox Code Playgroud)
但是我找不到 18