R 除用于装箱的列以外的其他列的累计值
假设有一个2列(X,Y)文件,X从0到1,Y从-1到1 我要创建的是一个新文件,其中包含3列(Z、cnt、cnt_neg),这样对于R 除用于装箱的列以外的其他列的累计值,r,count,R,Count,假设有一个2列(X,Y)文件,X从0到1,Y从-1到1 我要创建的是一个新文件,其中包含3列(Z、cnt、cnt_neg),这样对于 Z <- seq(from=0,to=0.2,by=0.001) cnt = number of cases for (X>Z[i]) cnt_neg = number of cases for (X>Z[i] && Y<0) 实际上,这是2个累积分布;一个标准的一个和一个在柱上完成,而不是用于装箱的柱。 我可以像其他
Z <- seq(from=0,to=0.2,by=0.001)
cnt = number of cases for (X>Z[i])
cnt_neg = number of cases for (X>Z[i] && Y<0)
实际上,这是2个累积分布;一个标准的一个和一个在柱上完成,而不是用于装箱的柱。
我可以像其他语言一样使用双循环,但我真的很想使用R
在各种尝试中,有:
for(i in 1:length(Z)){
cnt[i]<-sum(rle(X>Z[i])$lengths)
cnt_neg[i]<-sum(rle(X>Z[i] && Y<0)$lengths)
cnt[i]=cnt[i]+1
cnt_neg[i]=cnt_neg[i]+1
}
for(i in 1:length(Z)){
cnt[i]Z[i])$长度
cnt_neg[i]Z[i]和&Y如果我们将X
和Y
组合在一个数据框中
,我们可以使用dplyr
来解决它,如果我了解您的意图:
library(dplyr)
df <- data.frame(X, Y)
df %>%
mutate(bin = cut(X,
seq(from=0,to=0.2,by=0.001),
labels = F,
right = T,
include.lowest = F),
bin = ifelse(is.na(bin), 0, bin)
) %>%
group_by(bin) %>%
summarise(cnt = n(), cnt_neg = sum(Y < 0)) %>%
ungroup() %>%
mutate(bin = bin * .001, cnt = sum(cnt) - cumsum(cnt), cnt_neg = sum(cnt_neg) - cumsum(cnt_neg)) %>%
as.data.frame
# bin cnt cnt_neg
# 1 0.000 5 2
# 2 0.001 4 1
# 3 0.007 3 1
# 4 0.008 2 0
# 5 0.018 1 0
# 6 0.143 0 0
库(dplyr)
df%
变异(bin=cut(X,
序号(从=0到=0.2,由=0.001),
标签=F,
右=T,
包括(最低=F),
bin=ifelse(is.na(bin),0,bin)
) %>%
分组依据(bin)%>%
总结(cnt=n(),cnt_neg=sum(Y<0))%>%
解组()%>%
突变(bin=bin*.001,cnt=sum(cnt)-cumsum(cnt),cnt_neg=sum(cnt_neg)-cumsum(cnt_neg))%>%
as.data.frame
#bin cnt cnt_neg
# 1 0.000 5 2
# 2 0.001 4 1
# 3 0.007 3 1
# 4 0.008 2 0
# 5 0.018 1 0
# 6 0.143 0 0
创建一个新变量bin
,每个X值所属的间隔
按它分组
计算间隔中有多少个值以及有多少个Y为负值
解组
计算逆cumsum
您好,谢谢您的帮助。输出应该是0 5 2uhm,它是..第一行:bin=0,cnt=5,cnt_neg=2。第二行:bin=0.001,cnt=4,cnt_neg=1您好,对不起,我的消息不完整。是的!它按照我的要求工作。我可以理解您所做的,但这远远超出我的技能。谢谢!!mm查看dplyr代码> >剪切部分>代码>请考虑投票和接受答案。
library(dplyr)
df <- data.frame(X, Y)
df %>%
mutate(bin = cut(X,
seq(from=0,to=0.2,by=0.001),
labels = F,
right = T,
include.lowest = F),
bin = ifelse(is.na(bin), 0, bin)
) %>%
group_by(bin) %>%
summarise(cnt = n(), cnt_neg = sum(Y < 0)) %>%
ungroup() %>%
mutate(bin = bin * .001, cnt = sum(cnt) - cumsum(cnt), cnt_neg = sum(cnt_neg) - cumsum(cnt_neg)) %>%
as.data.frame
# bin cnt cnt_neg
# 1 0.000 5 2
# 2 0.001 4 1
# 3 0.007 3 1
# 4 0.008 2 0
# 5 0.018 1 0
# 6 0.143 0 0