Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 - Fatal编程技术网

R:列值与另一列的范围值之和

R:列值与另一列的范围值之和,r,R,你好 我有一张两列的表格。在第一列(x)中,有一些值,我想根据指定的值范围(在我的示例中为-300)将其划分为类别。然后使用这些类别,我想对另一列(v)中的值求和。例如,使用我的测试数据:第一类是从65100到65400(65100) 结果是:有一个由两列组成的表格。第一列是x的类别;第二列是v的相应值之和 谢谢你 # data set.seed(1) x <- sample(seq(65100, 67900, by=5), 100, replace = TRUE) v <- sam

你好

我有一张两列的表格。在第一列(x)中,有一些值,我想根据指定的值范围(在我的示例中为-300)将其划分为类别。然后使用这些类别,我想对另一列(v)中的值求和。例如,使用我的测试数据:第一类是从65100到65400(65100) 结果是:有一个由两列组成的表格。第一列是x的类别;第二列是v的相应值之和

谢谢你

# data
set.seed(1)
x <- sample(seq(65100, 67900, by=5), 100, replace = TRUE)
v <- sample(seq(1000, 8000), 100, replace = TRUE)
tabl <- data.frame(x=c(x), v=c(v))
attach(tabl)
#categories
seq(((min(x) - min(x)%%300) + 300), ((max(x) - max(x)%%300) + 300), by =300)
#数据
种子(1)

我知道你想:

  • 切向量x
  • 使用预先计算的截止阈值
  • 使用这些分组计算向量v上的和
  • 这是一行代码,包含
    data.table
    和链接。您的数据位于
    data.table
    中,名为
    DT

    DT[,CUT:=CUT(x,breaks)][,sum(v),by=CUT]

    说明:

    首先,将截止值分配给变量
    中断
    如下


    使用dplyr时会中断我习惯这样做。尽管我也喜欢cut解决方案

    # data
    set.seed(1)
    x <- sample(seq(65100, 67900, by=5), 100, replace = TRUE)
    v <- sample(seq(1000, 8000), 100, replace = TRUE)
    tabl <- data.frame(group=c(x), value=c(v))
    attach(tabl)
    #categories
    s <- seq(((min(x) - min(x)%%300) + 300), ((max(x) - max(x)%%300) + 300), by =300)
    
     tabl %>% rowwise() %>% mutate(g = s[min(which(group < s), na.rm=T)]) %>% ungroup() %>%
       group_by(g) %>% summarise(sumvalue = sum(value))
    
    #数据
    种子(1)
    x%
    按(g)分组%>%总结(sumvalue=总和(值))
    
    结果:

     g        sumvalue
     <dbl>    <int>
     65400    28552
     65700    49487
     66000    45493
     66300    77865
     66600    43887
     66900    21187
     67200    65785
     67500    66517
     67800    61738
     68100     1722     
    
    g值
    65400    28552
    65700    49487
    66000    45493
    66300    77865
    66600    43887
    66900    21187
    67200    65785
    67500    66517
    67800    61738
    68100     1722     
    
    试试这个(不需要软件包):


    s您可以使用列上的
    cut
    按类别进行分类。似乎许多问题已经解释了如何使用
    cut
    然后
    总结
    聚合
    ,如下所示:
     g        sumvalue
     <dbl>    <int>
     65400    28552
     65700    49487
     66000    45493
     66300    77865
     66600    43887
     66900    21187
     67200    65785
     67500    66517
     67800    61738
     68100     1722     
    
    s <- seq(65100, max(tabl$x)+300, 300)
    tabl$col = as.vector(cut(tabl$x, breaks = s, labels = 1:10))
    df <- aggregate(v~col, tabl, sum)
    
       # col     v
    # 1    1 33234
    # 2    2 44805
    # 3    3 45493
    # 4    4 77865
    # 5    5 43887
    # 6    6 22893
    # 7    7 64079
    # 8    8 66517
    # 9    9 61738
    # 10  10  1722