我试图确定动物在一定时间内达到发育阶段的比例。我有动物到达发育阶段的日子。
X<-filter(sort_delays, Treatment=="Control")%>%select('W-L5')
这是X
:
X <- data.frame(W.L5 = c(6L, 6L, 6L, 6L, 7L, 5L, 6L, 6L, 7L, 6L, 6L, 6L, 6L, 6L, 6L,
7L, 5L, 6L, 6L, 6L, 5L, 5L, 5L, 6L, 6L))
然后我用我需要的列创建了一个数据框,一个包含我的动物可能发展的不同日期,另一个包含输入计算比率所需的数据
Days<-c(4:9)
number<-NA
Percent<-NA
Total_percent<-NA
df<-data.frame(Days, number, Percent, Total_percent)
然后我使用以下代码填充我的数据框:
#now start populating the number column
df[1,2]<- length(which(X==df[1,1]))
df[2,2]<- length(which(X==df[2,1]))
df[3,2]<- length(which(X==df[3,1]))
df[4,2]<- length(which(X==df[4,1]))
df[5,2]<- length(which(X==df[5,1]))
df[6,2]<- length(which(X==df[6,1]))
#use number to figure out percent
df$Percent<-(df$number/length(X[,1]))*100
#use percent to determine the total percentage
df[1,4]<- df[1,3]
df[2,4]<- df[2,3]+df[1,4]
df[3,4]<- df[3,3]+df[2,4]
df[4,4]<- df[4,3]+df[3,4]
df[5,4]<- df[5,3]+df[4,4]
df[5,4]<- df[6,3]+df[5,4]
结果df
看起来像这样:
Days number Percent Total_percent
1 4 0 0 0
2 5 5 20 20
3 6 17 68 88
4 7 3 12 100
5 8 0 0 100
6 9 0 0 100
即使这样可以很好地创建我想要的表格,但我最终会处理更大的数据集以及更多的变化,导致我的“df&#39;从而产生了大量的代码。
我想知道是否有人知道更好的方法吗?
答案 0 :(得分:1)
我们没有sort_delays
,但考虑X
正确的输出:
X<-filter(sort_delays, Treatment=="Control")%>%select('W-L5')
df<-data.frame(Days=c(4:9))
df$number <- unlist(lapply(df$Days, function(y) length(which(X==y))))
df$Percent<-(df$number/length(X[,1]))*100
df$Total_percent <- cumsum(df$Percent)
这将产生预期的结果:
df
## Days number Percent Total_percent
## 1 4 0 0 0
## 2 5 5 20 20
## 3 6 17 68 88
## 4 7 3 12 100
## 5 8 0 0 100
## 6 9 0 0 100