小编Ale*_*lex的帖子

使用以下内容分配多个列:= data.table,group

使用分配给多个列的最佳方法是什么data.table?例如:

f <- function(x) {c("hi", "hello")}
x <- data.table(id = 1:10)
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情(当然这种语法不正确):

x[ , (col1, col2) := f(), by = "id"]
Run Code Online (Sandbox Code Playgroud)

为了扩展它,我可能有很多列的名称存储在一个变量(比如说col_names)中,我想这样做:

x[ , col_names := another_f(), by = "id", with = FALSE]
Run Code Online (Sandbox Code Playgroud)

做这样的事的正确方法是什么?

r variable-assignment dataframe data.table colon-equals

115
推荐指数
2
解决办法
7万
查看次数

选择嵌套列表的第一个元素

假设我有一个这样的列表:

x = list(list(1,2), list(3,4), list(5,6))
Run Code Online (Sandbox Code Playgroud)

我想要一个只包含嵌套列表的第一个元素的列表.我可以通过返回另一个列表来做到这一点

x1 = lapply(x, function(l) l[[1]])
Run Code Online (Sandbox Code Playgroud)

这有快捷符号吗?

r list

66
推荐指数
3
解决办法
6万
查看次数

data.table中的.EACHI?

我似乎无法找到关于究竟.EACHI做什么的任何文档data.table.我在文档中看到它的简要提及:

在i和设置中传递这些组时,已知组子集的聚合特别有效by=.EACHI.何时i是data.table,DT[i,j,by=.EACHI]评估连接中每一行j的组.我们称之为每个i的分组.DTi

但是,"群体"在上下文中DT是什么意思?是否由设置的密钥确定的组DT?该组是否每个使用所有列作为键的不同行?我完全理解如何运行类似DT[i,j,by=my_grouping_variable]但是如何.EACHI工作的困惑.有人可以解释一下吗?

performance group-by r data.table

63
推荐指数
1
解决办法
1万
查看次数

write.csv用于大型data.table

我有一个data.table不是很大(2 GB)但由于某种原因write.csv需要很长时间才能写出来(我从未真正完成等待)并且似乎使用了大量的RAM来完成它.

我尝试将其转换data.table为a,data.frame尽管自从data.table扩展以来这不应该做任何事情data.frame.有没有人碰到这个?

更重要的是,如果你用Ctrl- 来阻止它C,R似乎没有给回记忆.

csv file-io r dataframe data.table

50
推荐指数
1
解决办法
3万
查看次数

在另一个时间范围内返回数据子集时间范围?

有非常好的方法来xts对象进行子集化.例如,可以获取所有年,月,日的所有数据,但严格地在上午9:30到下午4点之间执行:

my_xts["T09:30/T16:00"]
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式获得两个日期之间的所有观察:

my_xts["2012-01-01/2012-03-31"]
Run Code Online (Sandbox Code Playgroud)

或者在某个特定日期之前/之后的所有日期:

my_xts["/2011"]  # from start of data until end of 2011
my_xts["2011/"]  # from 2011 until the end of the data
Run Code Online (Sandbox Code Playgroud)

如何获取所有年份的特定月份或所有月份和年份的特定日期的所有数据?是否存在任何其他子集技巧?

r time-series subset xts

48
推荐指数
2
解决办法
4万
查看次数

在R中重塑与reshape2

我试图理解为什么开发已经转变reshapereshape2包装.它们似乎在功能上是相同的,但是,reshape2由于服务器上运行的旧版本的R ,我无法升级到当前.我担心一个主要错误的可能性会将开发转移到一个全新的包而不是简单地继续开发reshape.有谁知道reshape包装中是否存在重大缺陷?

r reshape reshape2

48
推荐指数
1
解决办法
2万
查看次数

在R中预分配列表

在R中扩展循环中的数据结构是低效的.我如何预先分配list一定的尺寸?matrix通过ncolnrow参数使这很容易.如何在列表中执行此操作?例如:

x <- list()
for (i in 1:10) {
    x[[i]] <- i
}
Run Code Online (Sandbox Code Playgroud)

我认为这是低效的.有什么更好的方法呢?

memory performance r list

44
推荐指数
3
解决办法
2万
查看次数

滚动连接R中的data.table

我试图更多地了解滚动连接的工作方式和一些混乱,我希望有人可以为我澄清这一点.举一个具体的例子:

dt1 <- data.table(id=rep(1:5, 10), t=1:50, val1=1:50, key="id,t")
dt2 <- data.table(id=rep(1:5, 2), t=1:10, val2=1:10, key="id,t")
Run Code Online (Sandbox Code Playgroud)

我希望这会生成一个long data.table,其中值为dt2:

dt1[dt2,roll=TRUE]
Run Code Online (Sandbox Code Playgroud)

相反,正确的方法似乎是:

dt2[dt1,roll=TRUE]
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释更多关于如何加入data.table作品,因为我显然没有正确理解它.我认为这dt1[dt2,roll=TRUE]对应于sql等价select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t),除了增加的功能locf.

另外文档说:

X[Y] is a join, looking up X's rows using Y (or Y's key if it has one) 
as an index.
Run Code Online (Sandbox Code Playgroud)

这使得似乎只返回X中的内容,正在进行的连接是内连接,而不是外连接.roll=T那个什么时候但那个特别id不存在dt1?多玩一点我无法理解列中放置了什么值.

join r time-series data.table

43
推荐指数
1
解决办法
1万
查看次数

R的排名和顺序

我无法理解R函数rank和R函数之间的区别order.他们似乎产生相同的输出:

> rank(c(10,30,20,50,40))
[1] 1 3 2 5 4
> order(c(10,30,20,50,40))
[1] 1 3 2 5 4
Run Code Online (Sandbox Code Playgroud)

有人可以为我阐明这个吗?谢谢

sorting r

43
推荐指数
5
解决办法
9万
查看次数

合并多个data.tables

我知道一个可以合并(加入)两大data.table争夺的merge功能或[.data.table功能.但是,如果我说10,data.tables并且想要do.call将它们全部合并在一起,是否有一个功能可以做到这一点?目前我do.call(cbind, ...)只使用非常特殊的情况.

merge join r data.table

37
推荐指数
3
解决办法
2万
查看次数