小编Cat*_*ath的帖子

按组获取最高值

这是一个示例数据框:

d <- data.frame(
  x   = runif(90),
  grp = gl(3, 30)
) 
Run Code Online (Sandbox Code Playgroud)

我想要d包含x每个值的前5个值的行的子集grp.

使用base-R,我的方法是这样的:

ordered <- d[order(d$x, decreasing = TRUE), ]    
splits <- split(ordered, ordered$grp)
heads <- lapply(splits, head)
do.call(rbind, heads)
##              x grp
## 1.19 0.8879631   1
## 1.4  0.8844818   1
## 1.12 0.8596197   1
## 1.26 0.8481809   1
## 1.18 0.8461516   1
## 1.29 0.8317092   1
## 2.31 0.9751049   2
## 2.34 0.9269764   2
## 2.57 0.8964114   2
## 2.58 0.8896466   2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

76
推荐指数
4
解决办法
7万
查看次数

按特定顺序对data.table中的行重新排序

我有一个data.table dumdt:

set.seed(123)
dumdt <- data.table(v1=sample(1:10, 5), v2=1:5)
Run Code Online (Sandbox Code Playgroud)

我想在这个特定的索引顺序中重新排序的行(首先是第三个观察,然后是第五个,然后是第二个,等等):

to_ord <- c(3, 5, 2, 1, 4)
Run Code Online (Sandbox Code Playgroud)

所以我想dumdt成为结果,dumdt[to_ord]但我也希望通过引用来做,并避免这样做dumdt <- dumdt[to_ord].

我知道我可以通过引用setorder(或setorderv)重新排序行,但只能按照一个或多个变量,按升序或降序排序,而不是按自定义顺序排序.
但是,如果我想按照自定义顺序重新排序列,而不是行,我可以使用setcolorder.

所以这里有我的问题:是否有一个函数可以像setcolorder行一样工作(或者用一种方法setorder来做同样的事情)?

我想要的输出就像是

setroworder(x=dumdt, neworder=to_ord)
dumdt
   # v1 v2
# 1:  4  3
# 2:  6  5
# 3:  8  2
# 4:  3  1
# 5:  7  4
Run Code Online (Sandbox Code Playgroud)

sorting r data.table

20
推荐指数
2
解决办法
4563
查看次数

具有"NaN"值的函数表的意外行为

最近,我遇到的table功能行为并非我所期望的:

例如,让我们采取以下向量:

ex_vec <- c("Non", "Non", "Nan", "Oui", "NaN", NA)
Run Code Online (Sandbox Code Playgroud)

如果我检查NA向量中的值,"NaN"则不被视为一个(如预期的那样):

is.na(ex_vec)
# [1] FALSE FALSE FALSE FALSE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

但如果我试图获得不同的值频率:

table(ex_vec)
#ex_vec
#Nan Non Oui 
#  1   2   1
Run Code Online (Sandbox Code Playgroud)

"NaN" 没有出现在表格中.

但是,如果我"要求" table显示NA值,我会得到:

table(ex_vec, useNA="ifany")
#ex_vec
# Nan  NaN  Non  Oui <NA> 
#   1    1    2    1    1
Run Code Online (Sandbox Code Playgroud)

因此,字符串"NaN"被视为调用NA内部的值table,而在输出中将其视为非NA值.

我知道(这会更好)我可以通过将我的矢量转换为a来解决我的问题factor但是,我真的很想知道这里发生了什么.有没有人有想法?

r na

16
推荐指数
2
解决办法
765
查看次数

在R中处理时间的最佳做法是什么?

我正在使用调查数据集.它有两个字符串vectors,start并且finish,表示当采访开始,成品,分别是一天的时间.

它们是character看起来像:"9:24 am","12:35 pm"等等的字符串.我试图根据这两个来计算面试的持续时间.这样做的最佳方式是什么?

我知道,对于日期,有很多的classeS或function好像as.date(),as.Date(),chron(),或as.POSIXct().所以我一直在寻找类似的东西as.time(),却找不到它.我是否应该附上一个补充日期并将整个事情转换为POSIX()日期时间class,然后使用difftime()

处理时间的最佳做法是R什么?

datetime r

14
推荐指数
1
解决办法
2653
查看次数

避免传递数据框的最佳方法是什么?

我有12 data.frame秒钟可以使用.它们是相似的,我必须对每个进行相同的处理,所以我写了一个函数,它接受一个data.frame,处理它,然后返回一个data.frame.这有效.但我担心我会绕过一个非常大的结构.我可能正在制作临时副本(是吗?)这样做效率不高.避免data.frame四处走动的最佳方法是什么?

doSomething <- function(df) {
  // do something with the data frame, df
  return(df)
}
Run Code Online (Sandbox Code Playgroud)

r dataframe

12
推荐指数
2
解决办法
3434
查看次数

用data.table计算:变量中有多少2x2非NA值?

假设我有这个data.table(实际数据是25061 x 5862):

require(data.table)
df
  # gene     P1     P2     P3     P4     P5
 # 1: gene1  0.111  0.319  0.151     NA -0.397
 # 2: gene10  1.627  2.252  1.462 -1.339 -0.644
 # 3: gene2 -1.766 -0.056 -0.369  1.910  0.981
 # 4: gene3 -1.346  1.283  0.322 -0.465  0.403
 # 5: gene4 -0.783     NA -0.005  1.761  0.066
 # 6: gene5  0.386 -0.309 -0.886 -0.072  0.161
 # 7: gene6  0.547 -0.144 -0.725 -0.133  1.059
 # 8: gene7  0.785 -1.827  0.986  1.555 -0.798
 # 9: gene8 -0.186 …
Run Code Online (Sandbox Code Playgroud)

r data.table

11
推荐指数
1
解决办法
242
查看次数

在pandas数据框中选择多列,列索引为序列号

我试图在数据框中提取第7到第14列.然而

df[0:3] 只给出第1到第3行.

如果我想查找列,有谁知道我该怎么办?

我知道如何使用列名这样做,df['a']但由于名称太多,我只想输入类似于df[,7:14]R的内容.

提前致谢.

python r dataframe

9
推荐指数
1
解决办法
8627
查看次数

如何在R的热图中添加水平分隔符

使用以下代码:

library(gplots)
heatmap.2(as.matrix(mtcars),density.info="none",trace="none",Colv=FALSE,Rowv=FALSE,dendrogram="none",margin=c(10,10))
Run Code Online (Sandbox Code Playgroud)

我可以创建热图.但我想要做的是添加给定块的水平分隔符:

在此输入图像描述

假设我有3个块定义为列表:

block1 <- c("Mazda RX4","Mazda RX4 Wag","Datsun 710","Hornet 4 Drive","Hornet Sportabout","Valiant","Duster 360","Merc 240D")
block2 <- c("Merc 230","Merc 280","Merc 280C","Merc 450SE","Merc 450SL","Merc 450SLC","Cadillac Fleetwood", "Lincoln Continental","Chrysler Imperial"  ,"Fiat 128","Honda Civic","Toyota Corolla","Toyota Corona","Dodge Challenger","AMC Javelin")
block3 <- c("Camaro Z28","Pontiac Firebird","Fiat X1-9","Porsche 914-2","Lotus Europa","Ford Pantera L","Ferrari Dino","Maserati Bora","Volvo 142E")
Run Code Online (Sandbox Code Playgroud)

plot r heatmap

9
推荐指数
1
解决办法
4163
查看次数

根据另一个data.table中的值填充data.table

我很新,data.table但想用它来解决我的问题,因为我觉得它比使用"常规"data.frames快1000倍.

这是我的问题:

是)我有的:

2个data.tables dt1dt2像这样:

dt1 <- data.table(SID=paste0("S", 1:15), Chromo=rep(1:3, e=5), PP=rep(1:5, 3), P1=0, P2=0, P3=0)
set.seed(17)
dt2 <- data.table(PID=rep(paste0("P", 1:3), c(2, 6, 3)), Chr=c(1, 3, 1, 1, 2, 3, 3, 3, 2, 2, 3), start= c(1, 1, 1, 4, 2, 1, 2, 4, 2, 4, 2), end=c(3, 4, 2, 5, 4, 1, 3, 5, 3, 5, 5), val=rnorm(11))
Run Code Online (Sandbox Code Playgroud)

我想要的是:

填充dt1dt2[, val]在右列的基础上,dt2[, PID]和右线,基于dt1[, Chromo]= dt2[, Chr]和 …

r dataframe data.table

9
推荐指数
1
解决办法
1885
查看次数

R data.table列名在函数内不起作用

我试图在函数中使用data.table,我试图理解为什么我的代码失败.我有一个data.table如下:

DT <- data.table(my_name=c("A","B","C","D","E","F"),my_id=c(2,2,3,3,4,4))
> DT
   my_name my_id
1:       A     2
2:       B     2
3:       C     3
4:       D     3
5:       E     4
6:       F     4
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用不同的"my_id"值创建所有"my_name"对,对于DT,它将是:

Var1 Var2    
A    C
A    D
A    E
A    F
B    C
B    D
B    E
B    F
C    E
C    F
D    E
D    F
Run Code Online (Sandbox Code Playgroud)

我有一个函数来返回"my_id"的所有对"my_name",这对值"my_id"按预期工作.

get_pairs <- function(id1,id2,tdt) {
    return(expand.grid(tdt[my_id==id1,my_name],tdt[my_id==id2,my_name]))
}
> get_pairs(2,3,DT)
Var1 Var2
1    A    C
2    B    C
3    A    D
4    B    D
Run Code Online (Sandbox Code Playgroud)

现在,我想对所有id对执行此函数,我尝试通过查找所有id对然后使用mapply和get_pairs函数来执行此操作.

> combn(unique(DT$my_id),2)
     [,1] …
Run Code Online (Sandbox Code Playgroud)

r mapply data.table

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

标签 统计

r ×10

data.table ×5

dataframe ×3

datetime ×1

dplyr ×1

heatmap ×1

mapply ×1

na ×1

plot ×1

python ×1

sorting ×1