我有一些代码来自使用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
我的问题是为什么我会收到此消息?我可以更改代码中的某些内容以获得我想要的结果吗?
任何帮助都会非常感激,因为书中有很多代码对我不起作用。
答案 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
是时尚和时尚的 - 我非常喜欢它 - 但没有什么是永恒的。