R一个变量的累积和,而另一个变量跟踪“截止”

y0u0uwnf  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(91)

我想做的是找到超过花瓣宽度/花瓣长度的每个“临界值”的鸢尾花萼片长度的总和。
考虑下面的代码

library(tidyverse)
data("iris")       
 iris <- iris %>% 
      mutate(prop_width_length = Petal.Width/Petal.Length)
    
    prop_width_length <-  as.data.frame(iris$prop_width_length)
    
    portion = as.data.frame(seq(0,1,0.001))
    cumsum = NULL
    
    
    for (i in 1:1001) {
      cumsum[i] = sum(prop_width_length >= portion[i,1])
    }

sigportion <-  cbind(portion, cumsum)

这给了我一个累积的总和,我有多少鸢尾花的宽度/长度比例大于或等于每个“临界值”。最后,它把它放在一个 Dataframe ,这样我就可以做一个很好的ggplot。基本上,它计算有多少花有超过每个“临界值”。
除了上面的代码之外,我还想添加每个虹膜的所有萼片长度,其中它们的花瓣宽度/长度比大于或等于存储在我的部分变量中的每个“临界值”。
所以就像

sum all the sepal lengths of iris flowers which have petal width/length >= critvalue
v1l68za4

v1l68za41#

使用data.table变得非常简单

library(data.table)
iris<-as.data.table(iris)
iris[,prop_width_length := Petal.Width/Petal.Length]
portion<-as.data.table(seq(from = 0,to = 1,by = 0.001))
cumsum<-vector()
for(i in 1:nrow(portion)){
  cumsum[i]<-iris[prop_width_length >= portion[[1]][i],sum(Sepal.Length)]
}
sigportion<-cbind(portion,cumsum)

希望能帮上忙!

agxfikkp

agxfikkp2#

你可以用lapply来实现。必须有一个更简洁的方法来做到这一点,但这里是我的版本:

mySeq<-seq(0,1,0.001)
df<-data.frame(mySeq=mySeq,cumsum=as.numeric(lapply(mySeq,function(X)sum(ifelse(iris$Petal.Width/iris$Petal.Length>=X,1,0)))))

在函数中,我检查条件并总结满足的情况
下面的代码应该给予你萼片长度的总和

dfSepalLengths<-data.frame(mySeq=mySeq,cumsum=as.numeric(lapply(mySeq,function(X)sum(ifelse(iris$Petal.Width/iris$Petal.Length>=X,iris$Sepal.Length,0)))))

你也可以像下面这样修改你的代码来得到同样的结果:

library(tidyverse)
data("iris")       
iris <- iris %>% 
  mutate(prop_width_length = Petal.Width/Petal.Length)

portion = as.data.frame(seq(0,1,0.001))
cumsum = NULL

for (i in 1:1001) {
  cumsum[i] = sum(ifelse(iris$prop_width_length >= portion[i,1],iris$Sepal.Length,0))
}

sigportion <-  cbind(portion, cumsum)

相关问题