【发布时间】:2017-12-09 22:29:28
【问题描述】:
我是 R 新手,正在努力准备一周后的 R 考试。
在一个家庭作业问题上,我试图以尽可能多的方式解决一个问题(准备更多工具在时间有限的编码考试中总是派上用场)。
问题如下:在我的数据集中,“ckm_nodes.csv”
可变采用日期记录了采用日期的月份 医生从 1953 年 11 月开始开出四环素。如果医生在第 17 个月(即 1955 年 2 月,即研究结束时)之前没有开始开处方,则记录为 Inf。如果不知道医生何时或是否采用四环素,则其值为 NA。回答以下问题。 (a) 研究的每个月有多少医生开始开四环素? (b) 有多少人在研究期间从未开过药? (c) NA 有多少?
我试图使用 aggregate( ) 函数来计算每个月开始开处方的医生人数。我的基本代码是:
aggregate(nodes$adoption_date, by = nodes["adoption_date"], length),
这适用于 NA 值。
我想知道是否有一种方法可以让聚合函数计算 NA 值,因此我阅读了有关聚合()函数的 R 文档,其中内容如下:
na.action
一个函数,它指示当数据包含 NA 值时应该发生什么。默认是忽略给定变量中的缺失值。
所以我搜索了如何解决这个问题并设置“na.action = NULL”。但是,当我尝试运行此代码时,发生了以下情况:
aggregate(nodes$adoption_date, by = nodes["adoption_date"], length, na.action = NULL)
FUN(X[[i]], ...) 中的错误: 2 个参数传递给 'length' 需要 1
试图按顺序移动参数:
aggregate(nodes$adoption_date, length, by = nodes["adoption_date"], na.action = NULL)
FUN(X[[i]], ...) 中的错误: 2 个参数传递给 'length' 需要 1
但它也不起作用。
知道如何解决这个问题吗?
********************** tapply()
另外,我想知道是否可以使用“tapply”功能来解决家庭作业上的 Q1。我试过了
count <- function(data){
return(length(data$adoption_date))
}
count_tetra <- tapply(nodes,nodes$adoption_date,count)
tapply 中的错误(节点,节点 $adoption_date,计数):参数必须 长度相同
**************循环
我也想知道如何使用循环来实现相同的目标。
我可以从对向量进行排序开始:
nodes_sorted <- nodes[order(nodes$adoption_date),]
然后,编写一个 for 循环,但是如何...?
目标是得到一个向量计数,计数的每个元素对应一个处方数的值。
谢谢!
示例数据:
节点
【问题讨论】:
-
您好,欢迎来到 SO。您已经提供了很好的详细信息,但您需要将代码格式化为 sn-ps。