0

新来的和 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)))

作为输出数据框,我得到TEERmean列中的值与原始数据框的第一行中的值相同,sd并且列中的值为零sem。还有一个错误:

警告信息:

levels<-( *tmp*, value = if (nl == nL) as.character(labels) else paste0(labels, : 不推荐使用因子中的重复级别

看起来该函数仅通过数据框的第一部分,并且不费心查看time.variable组的重复项?

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

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

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

4

2 回答 2

0

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

最初,当我加载数据框时,每个变量(“cntrl”、“agr1111”、“agr2222”)附近都有一个唯一的字母和数字(“A1”、“A2”、“B1”、“B2” ),因此,看起来像这样:“cntrl.A1”,“agr1111.B2”。而不是使用gsub我尝试使用filterwithgrepl来隔离我需要的某些行,然后从它们中减去字母编号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 个数据框。但我敢肯定,我将能够合并数据框或将它们分别绘制在同一个图表上。

于 2017-07-13T23:55:44.013 回答
-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~。(提示:查看计数列)

于 2017-07-12T11:36:36.847 回答