无法正确应用R中的ddply-summarize

时间:2017-07-12 03:56:49

标签: r plyr summarize

这里是新来的R,所以请耐心等待。

我有一个与此类似的data.frame:

     time. variable     TEER
1    0.07    cntrl 234.2795
2    1.07    cntrl 602.8245
3    2.07    cntrl 703.6844
4    3.07    cntrl 699.4538
...
48   0.07    cntrl  234.2795
49   1.07    cntrl  602.8245
50   2.07    cntrl  703.6844
51   3.07    cntrl  699.4538
...
471  0.07  agr1111 251.9119
472  1.07  agr1111 480.1573
473  2.07  agr1111 629.3744
474  3.07  agr1111 676.6782
...
518  0.07  agr1111 251.9119
519  1.07  agr1111 480.1573
520  2.07  agr1111 629.3744
521  3.07  agr1111 676.6782
...
753  0.07  agr2222 350.1049
754  1.07  agr2222 306.6072
755  2.07  agr2222 346.0387
756  3.07  agr2222 447.0137
757  4.07  agr2222 530.2433
...
802  2.07  agr2222 346.0387
803  3.07  agr2222 447.0137
804  4.07  agr2222 530.2433
805  5.07  agr2222 591.2122

我正在尝试将ddply()应用于此数据框以获取具有均值和标准错误的新数据框(稍后绘制),如下所示:

> ddply(data_melt, c("time.", "variable"), summarise,
mean = mean(TEER), sd = sd(TEER),
sem = sd(TEER)/sqrt(length(TEER)))

我作为输出数据帧获得的内容与TEER列中的mean值相同,与原始数据帧的第一行中的值相同,sd和{{1}中的零值相同}} 列。还有一个错误:

  

警告讯息:

     
    

semlevels<-,值= if(nl == nL)as.character(标签)其他     paste0(标签,:不推荐使用因子中的重复级别

  

看起来这个函数只是经过了数据框的第一部分而且没有考虑*tmp*time.组的重复项?

我已经尝试过在这里查看类似问题的解决方案,但似乎没有任何效果。我错过了什么或者这是一个合法的问题吗?

任何帮助/提示表示赞赏。

请告诉我,如果我没有连贯地解释问题,我会尝试详细介绍。

2 个答案:

答案 0 :(得分:0)

我想我找到了解决问题的方法。

最初,当我加载数据框时,每个变量(“cntrl”,“agr1111”,“agr2222”)在它们附近都有一个唯一的字母和数字(“A1”,“A2”,“B1”, “B2”)因此看起来像这样:“cntrl.A1”,“agr1111.B2”。相反,使用gsub从每个字母中减去字母数字我尝试使用filter grepl以隔离我需要的某些行,然后summarise。 这是代码:

library(dplyr)
dt_11 <- dt %>%
        group_by(time.) %>%
        filter(grepl("agr1111", variable)) %>%
        summarise(avg_11 = mean(teer), 
                  sd_11 = sd(teer),
                  sem_11 = sd(teer)/sqrt(length(teer)))

这只给了我一个带有一组变量(“agr1111”)的数据框,我将不得不再做两次,对于“cntrl”和“agr2222”,因此产生了3个数据帧。但我敢肯定,我将能够合并数据帧或分别在同一图表上绘制它们。

答案 1 :(得分:-1)

这不适合作为答案,但要评论时间太长了:

我运行了您的确切代码,一切正常!

> ddply(dt, c("time.", "variable"), summarise,
+       mean = mean(TEER), sd = sd(TEER),
+       sem = sd(TEER)/sqrt(length(TEER)), count = length(TEER))
#time. variable     mean sd sem count
# 0.07  agr1111 251.9119  0   0     2
# 0.07  agr2222 350.1049 NA  NA     1
# 0.07    cntrl 234.2795  0   0     2
# 1.07  agr1111 480.1573  0   0     2
# 1.07  agr2222 306.6072 NA  NA     1
# 1.07    cntrl 602.8245  0   0     2
# 2.07  agr1111 629.3744  0   0     2
# 2.07  agr2222 346.0387  0   0     2
# 2.07    cntrl 703.6844  0   0     2
# 3.07  agr1111 676.6782  0   0     2
# 3.07  agr2222 447.0137  0   0     2
# 3.07    cntrl 699.4538  0   0     2
# 4.07  agr2222 530.2433  0   0     2
# 5.07  agr2222 591.2122 NA  NA     1
> sessionInfo()
#other attached packages:
#[1] plyr_1.8.4 

您可以更新到最新版本的packaes。我不确定你的问题的原因。我希望你理解sd实际上是如何计算的以及为什么出现“NA~”。(提示:查看计数列)