Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 除用于装箱的列以外的其他列的累计值_R_Count - Fatal编程技术网

R 除用于装箱的列以外的其他列的累计值

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个累积分布;一个标准的一个和一个在柱上完成,而不是用于装箱的柱。 我可以像其他

假设有一个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个累积分布;一个标准的一个和一个在柱上完成,而不是用于装箱的柱。 我可以像其他语言一样使用双循环,但我真的很想使用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