小编mat*_*lin的帖子

按每组中的最大值过滤数据帧

我有一个180,000 x 400的数据框,其中行对应于用户,但每个用户只有两行.

id   date  ...
1    2012    ...
3    2010    ...
2    2013    ...
2    2014    ...
1    2011    ...
3    2014    ...
Run Code Online (Sandbox Code Playgroud)

我希望对数据进行子集化,以便仅保留每个用户的最新行(即每个id的日期值最高的行).

我首先尝试使用which()循环语句,其中idsifelse()语句sapply()很慢(O(n^2)我相信).

然后我尝试对dfby进行排序id,然后以2的增量循环并比较相邻的日期,但这也很慢(我想因为R中的循环是没有希望的).这两个日期的比较是瓶颈,因为排序几乎是即时的.

有没有办法对比较进行矢量化?

解决方案来自删除重复项,保持最大绝对值的输入

aa <- df[order(df$id, -df$date), ] #sort by id and reverse of date
aa[!duplicated(aa$id),]
Run Code Online (Sandbox Code Playgroud)

跑得很快!!

filtering r dataframe

13
推荐指数
2
解决办法
7235
查看次数

数据表中的行最大值

我有一个8,000,000行的数据集,在data.table中有100列,其中每列都是一个计数.我需要找到每行中的最大计数以及该最大值所在的列.

我可以使用快速获取哪一列具有每行的最大值

dt <- dt[, maxCol := which.max(.SD), by=pmxid]
Run Code Online (Sandbox Code Playgroud)

但试图获得实际的最大值

dt <- dt[, nmax := max(.SD), by=pmxid]
Run Code Online (Sandbox Code Playgroud)

非常慢.我跑了近20分钟,计算出最多只有200,000行.找到最大列需要大约.所有8,000,000行的2分钟.

如何找到最大值需要这么长时间?它不应该花费相同的时间which.max()或更少?

r data.table

8
推荐指数
1
解决办法
9635
查看次数

使用字符串更改数据框列的类

我有一个数据框,其中所有列都有character类,但许多列应该是数字或整数类.我还有一个包含每列所需类的字符向量,例如

classes <- c("integer", "integer", "numeric", "character", "logical", "numeric", ... )
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来使用此classes向量快速设置每列的类而不循环.

我希望有一种方法可以做到类似于命名,例如

names(df) <- names
Run Code Online (Sandbox Code Playgroud)

在哪里namescharacter矢量,或者在我的情况下

class(df) <- classes
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
1006
查看次数

标签 统计

r ×3

data.table ×1

dataframe ×1

filtering ×1