ddply的旧代码不起作用

时间:2015-10-28 17:08:44

标签: r plyr

我有一些代码来自使用R (2012)的行为科学的纵向数据分析,这些代码不起作用。

这就是数据的样子:

    subid risk gen eth ell sped  att ell2 risk2 grade read
      1  HHM   F Afr   0    N 0.94   No  DADV     5  172
      1  HHM   F Afr   0    N 0.94   No  DADV     6  185
      1  HHM   F Afr   0    N 0.94   No  DADV     7  179
      1  HHM   F Afr   0    N 0.94   No  DADV     8  194
      2  HHM   F Afr   0    N 0.91   No  DADV     5  200
      2  HHM   F Afr   0    N 0.91   No  DADV     6  210

代码如下所示:

ddply(.data = data.frame(MPLS.LS$read), .variables = .(grade = MPLS.LS$grade),
      each(read.mean = mean), na.rm = FALSE)

假设给我{5},而不是5年级,6年级,7年级和8年级的read的平均值。但我收到此错误消息:

Warning messages:
1: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
2: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
3: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
4: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA 

我的问题是为什么我会收到此消息?我可以更改代码中的某些内容以获得我想要的结果吗?

任何帮助都会非常感激,因为书中有很多代码对我不起作用。

1 个答案:

答案 0 :(得分:1)

将我的评论更改为答案:

ddply可以将您的完整数据框作为数据参数,然后您不需要重新指定数据:

ddply(.data = MPLS.LS,.variables =。(等级),总结,          read.mean = mean(读取,na.rm = FALSE))

each()通常在您想要在一列上调用多个函数的每个时使用。由于您有一个功能,因此summarize最好。

ddply或多或少被dplyr包取代。我建议从他们当前的文档中学习这些软件包,而不是从可能过时的教科书中学习。 dplyr quite a few vignettes有一个很好的介绍功能。此操作的dplyr等效项为

library(dplyr)
group_by(MPLS.LS, grade) %>%
  summarize(read.mean = mean(read, na.rm = FALSE))

dplyr是时尚和时尚的 - 我非常喜欢它 - 但没有什么是永恒的。