【发布时间】:2015-05-04 16:17:06
【问题描述】:
我已经为我的问题拼凑了一个快速的解决方案,但我觉得它很迟钝。此外,它使用 for 循环,根据我收集的内容,在 R 中应不惜一切代价避免使用循环。任何和所有整理此代码的建议都值得赞赏。我对 R 还是很陌生,但我担心我把一个相对简单的问题弄得太复杂了。
我有一个数据集如下:
id count group
2 6 A
2 8 A
2 6 A
8 5 A
8 6 A
8 3 A
10 6 B
10 6 B
10 6 B
11 5 B
11 6 B
11 7 B
16 6 C
16 2 C
16 0 C
18 6 C
18 1 C
18 6 C
我想为每个唯一 ID 创建一个新数据框,其中包含该 ID 的前两个计数的总和(例如,对于 ID 2,6+8=14)。我还想附加正确的组标识符。
一般而言,当您连续几天测量不同受试者和治疗的值时,您可能需要这样做,并且您想要计算每个受试者在前 x 天测量的总数。
这是我想出的:
id <- c(rep(c(2,8,10,11,16,18),each=3))
count <- c(6,8,6,5,6,3,6,6,6,5,6,7,6,2,0,6,1,6)
group <- c(rep(c("A","B","C"),each=6))
df <- data.frame(id,count,group)
newid<-c()
newcount<-c()
newgroup<-c()
for (i in 1:length(unique(df$"id"))) {
newid[i] <- unique(df$"id")[i]
newcount[i]<-sum(df[df$"id"==unique(df$"id")[i],2][1:2])
newgroup[i] <- as.character(df$"group"[df$"id"==newid[i]][1])
}
newdf<-data.frame(newid,newcount,newgroup)
我不确定的一些可能的改进/替代方案:
- For 循环与应用函数
- 我可以直接在 for 循环内创建数据帧,还是应该坚持创建可以后期分配给数据帧的向量?
- 更一致的方法来访问/子集向量/列($、[]、[[]]、子集?)
【问题讨论】:
标签: r loops apply subset multiple-conditions