相关疑难解决方法(0)

重塑宽格式,多列长格式

我想重塑一个宽格式数据集,该数据集具有多个测试,这些测试在3个时间点进行测量:

   ID   Test Year   Fall Spring Winter
    1   1   2008    15      16      19
    1   1   2009    12      13      27
    1   2   2008    22      22      24
    1   2   2009    10      14      20
    2   1   2008    12      13      25
    2   1   2009    16      14      21
    2   2   2008    13      11      29
    2   2   2009    23      20      26
    3   1   2008    11      12      22
    3   1   2009    13      11      27
    3   2   2008    17      12      23
    3   2   2009    14      9       31
Run Code Online (Sandbox Code Playgroud)

进入一个按列分隔测试的数据集,但将测量时间转换为长格式,对于每个新列,如下所示: …

r reshape melt reshape2

15
推荐指数
1
解决办法
2444
查看次数

将变量值重新整形为列的最快​​方法

我有一个大约300万行的数据集和以下结构:

PatientID| Year | PrimaryConditionGroup
---------------------------------------
1        | Y1   | TRAUMA
1        | Y1   | PREGNANCY
2        | Y2   | SEIZURE
3        | Y1   | TRAUMA
Run Code Online (Sandbox Code Playgroud)

作为R的新手,我在找到将数据重塑为下面结构的正确方法时遇到了一些麻烦:

PatientID| Year | TRAUMA | PREGNANCY | SEIZURE
----------------------------------------------
1        | Y1   | 1      | 1         | 0
2        | Y2   | 0      | 0         | 1
3        | Y1   | 1      | 0         | 1
Run Code Online (Sandbox Code Playgroud)

我的问题是:创建data.frame的最快/最优雅的方法是什么,其中PrimaryConditionGroup的值成为列,按PatientID和Year(计算出现的次数)分组?

performance r reshape

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

R data.table中各组之间的相关性

如果这些值按组存储在data.table的单个列中(除了将data.table转换为矩阵之外),是否有一种优雅计算值之间相关性的方法?

library(data.table)
set.seed(1)             # reproducibility
dt <- data.table(id=1:4, group=rep(letters[1:2], c(4,4)), value=rnorm(8))
setkey(dt, group)

#    id group      value
# 1:  1     a -0.6264538
# 2:  2     a  0.1836433
# 3:  3     a -0.8356286
# 4:  4     a  1.5952808
# 5:  1     b  0.3295078
# 6:  2     b -0.8204684
# 7:  3     b  0.4874291
# 8:  4     b  0.7383247
Run Code Online (Sandbox Code Playgroud)

有效的东西,但需要组名作为输入:

cor(dt["a"]$value, dt["b"]$value)
# [1] 0.1556371
Run Code Online (Sandbox Code Playgroud)

我正在寻找更多类似的东西:

dt[, cor(value, value), by="group"]
Run Code Online (Sandbox Code Playgroud)

但这并没有给我我追求的相关性.

对于具有正确结果的矩阵,这是同样的问题.

set.seed(1)             # reproducibility
m <- matrix(rnorm(8), ncol=2)
dimnames(m) <- list(id=1:4, …
Run Code Online (Sandbox Code Playgroud)

r correlation data.table

10
推荐指数
3
解决办法
7565
查看次数

如何以dcast的方式自我加入data.table

假设我有一个data.table"融化"的形式,我有一个键,标识符和值

library(data.table)
library(reshape2)
DT = data.table(X = c(1:5, 1:4), Y = c(rep("A", 5), rep("B", 4)), Z = rnorm(9))
DT2 = data.table(dcast(DT, X~Y))
Run Code Online (Sandbox Code Playgroud)

我怎样才能在里面进行那种自我加入data.table?

> DT
   X Y           Z
1: 1 A -0.19790449
2: 2 A  0.17906116
3: 3 A  0.01821837
4: 4 A  0.17309716
5: 5 A  0.05962474
6: 1 B -0.24629468
7: 2 B  0.92285734
8: 3 B  0.66002573
9: 4 B -1.01403880
> DT2
   X           A          B
1: 1 -0.19790449 -0.2462947
2: 2  0.17906116 …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

透视大数据.表格

我在R中有一个大数据表:

library(data.table)
set.seed(1234)
n <- 1e+07*2
DT <- data.table(
  ID=sample(1:200000, n, replace=TRUE), 
  Month=sample(1:12, n, replace=TRUE),
  Category=sample(1:1000, n, replace=TRUE),
  Qty=runif(n)*500,
  key=c('ID', 'Month')
)
dim(DT)
Run Code Online (Sandbox Code Playgroud)

我想调整这个data.table,使Category成为一个列.不幸的是,由于组内的类别数量不恒定,我不能使用这个答案.

我有什么想法可以做到这一点?

/编辑:基于joran的评论和flodel的回答,我们正在重塑以下内容data.table:

agg <- DT[, list(Qty = sum(Qty)), by = c("ID", "Month", "Category")]
Run Code Online (Sandbox Code Playgroud)

这种重塑可以通过多种方式实现(到目前为止我已经得到了一些好的答案),但我真正想要的是能够很好地扩展到data.table数百万行和数百到数千种类别的东西.

r data.table

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

在多个列上嵌套if else语句

我有一个大data.frame的前三列包含有关标记的信息.其余列是每个人中该标记的数字类型.每个人都有三列.数据集如下所示:

                      marker alleleA alleleB   X818 X818.1 X818.2   X345 X345.1 X345.2   X346 X346.1 X346.2
1   kgp5209280_chr3_21902067       T       A 0.0000 1.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000
2 chr3_21902130_21902131_A_T       A       T 0.8626 0.1356 0.0018 0.7676 0.2170 0.0154 0.8626 0.1356 0.0018
3 chr3_21902134_21902135_T_C       T       C 0.6982 0.2854 0.0164 0.5617 0.3749 0.0634 0.6982 0.2854 0.0164
Run Code Online (Sandbox Code Playgroud)

也就是说,对于每个标记(行),每个个体具有三个值,每列一个.

我想创建一个新的data.frame,它具有与原始行相同的所有行,但每个人只有一列.在每个人的一栏中,我希望每个人的三个值大于0.8.如果没有大于0.8的值,那么我想打印NA.例如,在我为第一行给出的数据集中,我希望第二个值为818(1.0000),第一个值为345(1.0000).在第二行中,我想要第一个值为818(0.8626),而对于345,没有一个值高于0.8,所以我希望NA打印,依此类推.因此,新数据集如下所示:

                     marker alleleA alleleB   X818 X345
1   kgp5209280_chr3_21902067       T       A 1.0000    1
2 chr3_21902130_21902131_A_T       A       T 0.8626   NA
Run Code Online (Sandbox Code Playgroud)

我一直试图使用if/else语句, …

loops if-statement r dataframe

7
推荐指数
1
解决办法
2129
查看次数

从data.table中的列列创建列

我无法弄清楚如何执行以下操作,从列表列中创建动态数量的列 data.table

set.seed(123); N=1e5
DT = data.table(x=rnorm(N), y=sample(c('a','b','c'),N,T))
probs = seq(.1,1,.1); newCols <- paste("q",100*probs,sep="");

DT2 <- DT[ ,list(Q=list(quantile(x,probs=probs))),by=y]
DT2
#   y                                                                          Q
#1: b -1.2817037351734,-0.840293441466144,-0.525195748246148,-0.259574774974136,
#2: c -1.26975023312311,-0.832359658553173,-0.513320691339448,-0.247863323660894,
#3: a -1.28189935066568,-0.838918942382995,-0.522409189372727,-0.257356179072232,

#Here I want to create 10 columns from Q called q10, q20...
DT2[ , newCols:=Q] #can't make this work because it is evaluated in the wrong environment I guess
Run Code Online (Sandbox Code Playgroud)

r data.table

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

将大型 2d 矩阵快速融化为 3 列 data.table

我有一个大矩阵 num [1:62410, 1:48010]

我想要一个长格式的 data.table

例如

   Var1 Var2     value
1:    1    1 -4227.786
2:    2    1 -4211.908
3:    3    1 -4197.034
4:    4    1 -4183.645
5:    5    1 -4171.692
6:    6    1 -4161.634
Run Code Online (Sandbox Code Playgroud)

最小的例子

m = matrix(1:5, nrow = 1000, ncol = 1000)
x = data.table(reshape2::melt(m))
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望同时列名 x、y 和 value。

以前我一直在使用data.table(melt(mymatrix)). 但是从reshape2::melt已弃用的警告来看,这在速度方面可能不是最佳的,解决这个问题的最佳“data.table”方法是什么?

以下不回答我的问题: 快速融化的数据表操作 正确/最快的方法来重塑数据表

其他答案参考已弃用的reshape2软件包

r data.table

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