小编Mat*_*wle的帖子

如何快速汇总和汇总数据?

我有一个数据集,其标题如下所示:

PID Time Site Rep Count
Run Code Online (Sandbox Code Playgroud)

我想总结Count通过Rep对每个PID x Time x Site combo

对得到的data.frame,我想要得到的平均值Count进行PID x Time x Site组合.

目前的功能如下:

dummy <- function (data)
{
A<-aggregate(Count~PID+Time+Site+Rep,data=data,function(x){sum(na.omit(x))})
B<-aggregate(Count~PID+Time+Site,data=A,mean)
return (B)
}
Run Code Online (Sandbox Code Playgroud)

这是非常缓慢的(原始data.frame是510000 20).有没有办法加快plyr的速度?

r plyr data.table

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

根据逻辑向量选择data.table中的列

假设我有以下data.frame和以下data.table:

DF = data.frame(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
Run Code Online (Sandbox Code Playgroud)

使用data.frame,我可以根据逻辑向量选择列,如下所示:

DF[,c(TRUE,TRUE,FALSE)]
Run Code Online (Sandbox Code Playgroud)

结果是:

  x y
1 a 1
2 a 3
3 a 6
4 b 1
5 b 3
6 b 6
7 c 1
8 c 3
9 c 6
Run Code Online (Sandbox Code Playgroud)

然而

DT[,c(TRUE,TRUE,FALSE)]
Run Code Online (Sandbox Code Playgroud)

导致:

[1]  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

怎么做到呢?

r logical-operators data.table

12
推荐指数
1
解决办法
8068
查看次数

使用SAS和R对记录进行排序和输出

我有以下数据集

PatientName BVAID   Rank    TreatmentCode   TreatmentID DoseID  
Tim Stuart  BVA-027 3   OP_TBC            1             1  
Tim Stuart  BVA-041 4   OP_TBC            1             1  
Tim Stuart  BVA-021 7   OP_TBC            1             1  
Tim Stuart  BVA-048 10  OP_TBC            1             1  
Tim Stuart  BVA-020 14  OP_TBC            1             1  
Tim Stuart  BVA-024 15  OP_TBC            1             1  
Tim Stuart  BVA-001 16  OP_TBC            1             1  
Tim Stuart  BVA-013 27  OP_TBC            1             1  
Tim Stuart  BVA-018 28  OP_TBC            1             1  
Tim Stuart  BVA-051 29  OP_TBC            1             1  
Tim Stuart  BVA-027 …
Run Code Online (Sandbox Code Playgroud)

r sas

11
推荐指数
3
解决办法
794
查看次数

从纵向数据中选择最后一个观察

我有一个数据集,每个参与者都有几个时间评估.我想为每个参与者选择最后一次评估.我的数据集如下所示:

ID  week  outcome
1   2   14
1   4   28
1   6   42
4   2   14
4   6   46
4   9   64
4   9   71
4  12   85
9   2   14
9   4   28
9   6   51
9   9   66
9  12   84
Run Code Online (Sandbox Code Playgroud)

我想只为每个参与者选择最后一次观察/评估,但我只有周数作为每个参与者的指标.这怎么可能在R(或excel?)

提前致谢,

尼基

r

11
推荐指数
2
解决办法
8178
查看次数

修改大R data.frame时内存不足

我有一个大数据框架需要大约900MB内存.然后我试着像这样修改它:

dataframe[[17]][37544]=0 
Run Code Online (Sandbox Code Playgroud)

似乎让R使用超过3G ram而R抱怨"错误:无法分配大小为3.0 Mb的矢量",(我在32位机器上.)

我发现这种方式更好:

dataframe[37544, 17]=0
Run Code Online (Sandbox Code Playgroud)

但R的占地面积仍然翻了一番,命令需要相当长的时间才能运行.

从C/C++背景来看,我对这种行为感到很困惑.我认为dataframe[37544, 17]=0应该在眨眼间完成,而不花费任何额外的内存(只应修改一个单元格).R对我发布的那些命令做了什么?在不增加内存占用量的情况下,修改数据框中某些元素的正确方法是什么?

非常感谢你的帮助!

r dataframe

11
推荐指数
3
解决办法
2687
查看次数

根据特定因子组合对行进行求和

这可能是一个愚蠢的问题,但我已经阅读了克劳利关于数据框架的章节并浏览了互联网并且还没有能够做任何事情.

这是一个类似于我的示例数据集:

> data<-data.frame(site=c("A","A","A","A","B","B"), plant=c("buttercup","buttercup",
"buttercup","rose","buttercup","rose"), treatment=c(1,1,2,1,1,1), 
plant_numb=c(1,1,2,1,1,2), fruits=c(1,2,1,4,3,2),seeds=c(45,67,32,43,13,25))
> data
  site     plant treatment plant_numb fruits seeds
1    A buttercup         1          1      1    45
2    A buttercup         1          1      2    67
3    A buttercup         2          2      1    32
4    A      rose         1          1      4    43
5    B buttercup         1          1      3    13
6    B      rose         1          2      2    25  
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建一个场景,只要存在独特的site&plant&treatment&plant_numb组合,就会将"种子"和"水果"相加.理想情况下,这会导致行减少,但保留原始列(即我需要上面的示例看起来像这样:)

  site     plant treatment plant_numb fruits seeds
1    A buttercup         1          1      3   112
2    A buttercup         2          2      1    32 …
Run Code Online (Sandbox Code Playgroud)

r plyr data.table

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

R行表示按组(或唯一ID)在多个列上

我有一个如下数据框(20,000行乘49列).每行具有唯一的名称(ID),每个ID在3列中具有3个重复读数(例如D15C D15C.1 D15C.2).组合名称的前4个字母("D15C")是组名.我需要按组名称对列进行平均(例如,平均D15C,D15C.1和D15.2得到D15C),因此最终表将合并为49列中的16列.

          ID  D04C D04C.1  D08H D08H.1 D08H.2  D15C D15C.1 D15C.2  D15L D15L.1 D15L.2
1 1367452_at 11.11  10.93 11.85  10.94  10.87 10.73  10.62  10.85 10.73  10.77  10.52   
2 1367453_at  9.65   9.94  9.78   9.68   9.67  9.86   9.71   9.82  9.74   9.71   9.76   
3 1367454_at 10.19  10.36  9.68  10.07  10.08 10.35  10.26  10.32 10.27  10.19  10.47   
(… 20000 rows)                                              
Run Code Online (Sandbox Code Playgroud)

我将其转置并编辑到以下数据框以便使用聚合:

      ID 1367452_at 1367453_at 1367454_at ... ...
1   D04C      11.11       9.65      10.19
2   D04C      10.93       9.94      10.36
3   D08H      11.85       9.78       9.68
4 …
Run Code Online (Sandbox Code Playgroud)

aggregate r mean data.table

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

如何用中位数填充NA?

示例数据:

set.seed(1)
df <- data.frame(years=sort(rep(2005:2010, 12)), 
                 months=1:12, 
                 value=c(rnorm(60),NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA))

head(df)
  years months      value
1  2005      1 -0.6264538
2  2005      2  0.1836433
3  2005      3 -0.8356286
4  2005      4  1.5952808
5  2005      5  0.3295078
6  2005      6 -0.8204684
Run Code Online (Sandbox Code Playgroud)

请告诉我,我怎样才能将df $值中的NA替换为其他月份的中位数?"value"必须包含同月所有先前值的中值.也就是说,如果当前月份是5月,则"值"必须包含5月份所有先前值的中值.

statistics r plyr data.table

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

子集不平衡(异型复制复制)来完成或平衡r中的数据集

我有一个数据集,重复次数不等.我希望通过删除那些不完整的条目(即复制小于最大值)来对数据进行子集化.只是一个小例子:

set.seed(123)
mydt <- data.frame (name= rep ( c("A", "B", "C", "D", "E"), c(1,2,4,4, 3)), 
                   var1 = rnorm (14, 3,1), var2 = rnorm (14, 4,1))
 mydt
       name     var1     var2
1     A 2.439524 3.444159
2     B 2.769823 5.786913
3     B 4.558708 4.497850
4     C 3.070508 2.033383
5     C 3.129288 4.701356
6     C 4.715065 3.527209
7     C 3.460916 2.932176
8     D 1.734939 3.782025
9     D 2.313147 2.973996
10    D 2.554338 3.271109
11    D 4.224082 3.374961
12    E 3.359814 2.313307
13    E 3.400771 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

读取具有不同行数的多个CSV以在文件开头跳过

我必须阅读大约300个单独的CSV.我已设法使用循环和结构化CSV名称自动化该过程.但是,每个CSV在开始时都有14-17行垃圾,并且随机变化,因此在read.table命令中编写'skip'参数的硬编码将不起作用.每个CSV的列名和列数相同.

这是我反对的一个例子:

QUICK STATISTICS:

      Directory: Data,,,,
           File: Final_Comp_Zn_1
      Selection: SEL{Ox*1000+Doma=1201}
         Weight: None,,,
     ,,Variable: AG,,,

Total Number of Samples: 450212  Number of Selected Samples: 277


Statistics

VARIABLE,Min slice Y(m),Max slice Y(m),Count,Minimum,Maximum,Mean,Std.Dev.,Variance,Total Samples in Domain,Active Samples in Domain AG,  
6780.00,   6840.00,         7,    3.0000,   52.5000,   23.4143,   16.8507,  283.9469,        10,        10 AG,   
6840.00,   6900.00,         4,    4.0000,    5.5000,    4.9500,    0.5766,    0.3325,        13,        13 AG,   
6900.00,   6960.00,        16,    1.0000,   37.0000,    8.7625,    9.0047,   81.0848,        29,        29 AG,   
6960.00,   7020.00,        58,    3.0000,   73.5000,   10.6931,   11.9087,  141.8172,       132,       132 …
Run Code Online (Sandbox Code Playgroud)

csv r read.table

11
推荐指数
2
解决办法
1478
查看次数