我是R的新手并且正在为R考试做准备,这将在一周内完成。
在其中一个家庭作业问题上,我试图尽可能多地解决一个问题(准备更多的工具总是在时间限制的编码考试中派上用场)。
问题如下:在我的数据集中," ckm_nodes.csv
"
变量采用日期记录了月份 医生开始开处方四环素,从1953年11月开始计算。如果医生没有在第17个月开始处方,即1955年2月,当研究结束时,这被记录为Inf。如果不知道医生何时或是否采用四环素,则其值为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]],...)出错: 2个参数传递给'长度'这需要1
试图按顺序移动参数:
aggregate(nodes$adoption_date, length, by = nodes["adoption_date"], na.action = NULL)
FUN(X [[i]],...)出错: 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循环,但是怎么......?
目标是获得向量计数,并且每个计数元素对应于处方数量的值。
谢谢!
示例数据:
节点&lt; - data.frame( adoption_date = rep(c(1:17,NA,Inf),times = c(rep(5,17),20,3)) )
答案 0 :(得分:1)
你看过data.table
了吗?我相信这样的事情可以解决问题。
require(data.table)
# convert nodes to data.table
setDT(nodes)
# count occurrences for each value of adoption_rate
nodes[, .N, by = adoption_date]