我是R的新手并且正在为R考试做准备,这将在一周内完成 .
在其中一个家庭作业问题上,我试图尽可能多地解决一个问题(准备更多的工具总是在时间限制的编码考试中派上用场) .
问题如下:在我的数据集中,“ ckm_nodes.csv
”
变量采用日期记录了医生开始处方四环素的月份,从1953年11月开始计算 . 如果医生没有在第17个月开始处方,即1955年2月,当研究结束时,这被记录为Inf . 如果不知道医生何时或是否采用四环素,他们的 Value 是NA . 回答以下问题 . (a)有多少医生在研究的每个月开始开处方四环素? (b)在研究期间有多少人没有开处方? (c)有多少个NAs?
我试图使用aggregate()函数来计算每个月开始开处方的医生数量 . 我的基本代码是:
aggregate(nodes$adoption_date, by = nodes["adoption_date"], length),
这适用于NA值 .
我想知道是否有一种方法可以让聚合函数计算NA值,所以我读了关于aggregate()函数的R文档,其中说明如下:
na.action一个函数,指示当数据包含NA值时应该发生什么 . 默认设置是忽略给定变量中的缺失值 .
所以我用谷歌搜索如何解决这个问题并设置“na.action = NULL” . 但是,当我尝试运行此代码时,发生了以下情况:
aggregate(nodes$adoption_date, by = nodes["adoption_date"], length, na.action = NULL)
FUN中的错误(X [[i]],...):传递给'length'的2个参数需要1
试图按顺序移动参数:
aggregate(nodes$adoption_date, length, by = nodes["adoption_date"], na.action = NULL)
FUN中的错误(X [[i]],...):传递给'length'的2个参数需要1
但它也不起作用 .
知道如何解决这个问题吗?
***************** tapply()
另外,我想知道是否可以使用“tapply”功能来解决家庭作业中的Q1问题 . 我试过了
count <- function(data){
return(length(data$adoption_date))
}
count_tetra <- tapply(nodes,nodes$adoption_date,count)
tapply错误(节点,节点$ adoption_date,count):参数必须具有相同的长度
**************循环
我也想知道如何使用循环来实现相同的目标 .
我可以从矢量排序开始:
nodes_sorted <- nodes[order(nodes$adoption_date),]
然后,写一个for循环,但是如何...?
目标是获得向量计数,并且每个计数元素对应于处方数量的值 .
谢谢!
示例数据:
节点< - data.frame(adoption_date = rep(c(1:17,NA,Inf),times = c(rep(5,17),20,3)))
1 回答
你看过
data.table
吗?我相信这样的事情可以解决问题 .