ddply的旧代码不起作用

问题描述 投票:1回答:1

我有一些代码来自使用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级,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 

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

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

r plyr
1个回答
1
投票

将我的评论改为答案:

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

ddply(.data = MPLS.LS,.variables =。(grade),summarize,read.mean = mean(read,na.rm = FALSE))

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

ddply或多或少被dplyr包裹所取代。我建议从他们当前的文档中学习这些软件包,而不是从可能过时的教科书中学习。 dplyrquite a few vignettes,在介绍功能方面做得很好。与此操作相当的dplyr

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

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

© www.soinside.com 2019 - 2024. All rights reserved.