R 一个变量的累积和,而另一个变量跟踪 "cutoff"
R cumulative sum of one variable while another variable tracks "cutoff"
请原谅我的问题很奇怪。这是构建它的最合乎逻辑的方式。真的,我不在乎花
我最终想做的是,找到每个 "critical value" 花瓣宽度/花瓣长度的鸢尾花萼片长度的总和。
考虑以下代码
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)
这让我得到了我的鸢尾花的 width/length 比例大于或等于每个 "critical value" 的总和。最后它把它放在一个数据框中,这样我就可以制作一个漂亮的 ggplot。基本上它会计算每个 "critical value".
上有多少朵花
除了上述代码之外,我还想将每个鸢尾花的所有萼片长度加起来,其中它们的花瓣 width/length 比率大于或等于每个 "critical value" 存储我的部分变量。
所以像
sum all the sepal lengths of iris flowers which have petal width/length >= critvalue
您可以使用 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)
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)
希望对您有所帮助!
请原谅我的问题很奇怪。这是构建它的最合乎逻辑的方式。真的,我不在乎花
我最终想做的是,找到每个 "critical value" 花瓣宽度/花瓣长度的鸢尾花萼片长度的总和。
考虑以下代码
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)
这让我得到了我的鸢尾花的 width/length 比例大于或等于每个 "critical value" 的总和。最后它把它放在一个数据框中,这样我就可以制作一个漂亮的 ggplot。基本上它会计算每个 "critical value".
上有多少朵花除了上述代码之外,我还想将每个鸢尾花的所有萼片长度加起来,其中它们的花瓣 width/length 比率大于或等于每个 "critical value" 存储我的部分变量。
所以像
sum all the sepal lengths of iris flowers which have petal width/length >= critvalue
您可以使用 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)
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)
希望对您有所帮助!