Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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:循环通过每5行数据帧并输入增量值_R_Loops_Data Munging - Fatal编程技术网

R:循环通过每5行数据帧并输入增量值

R:循环通过每5行数据帧并输入增量值,r,loops,data-munging,R,Loops,Data Munging,我试图为数据帧的每5行计算增量值。我是新手,不知道如何才能做到这一点 输入数据: state Value a 1 b 2 a 3 c 4 a 5 e 6 f 7 w 8 f 9 s 10 e 11 r 12 s 13 s 14 期望输出: state Value Increment a 1 1 b 2 1 a

我试图为数据帧的每5行计算增量值。我是新手,不知道如何才能做到这一点

输入数据:

state Value 
  a    1
  b    2
  a    3
  c    4
  a    5
  e    6
  f    7
  w    8
  f    9
  s    10
  e    11
  r    12
  s    13
  s    14
期望输出:

state Value Increment
  a    1     1
  b    2     1
  a    3     1
  c    4     1
  a    5     1
  e    6     2
  f    7     2
  w    8     2
  f    9     2
  s    10    2
  e    11    3
  r    12    3
  s    13    3
  s    14    3
尝试:

dt=read.表格(文本=
“国家价值
a 1
b 2
a 3
C4
a五
e 6
F7
w 8
F9
s 10
e 11
r 12
s 13
s 14“,收割台=T)

dt$Increment以下函数将执行您想要的操作。
论据:

  • DF
    -输入数据.frame
  • N
    -增量中每个值的重复次数
  • newcol
    -增量列的名称,默认为
    “增量”
  • 只需将结果分配给新的df

    fun <- function(DF, N, newcol = "Increment"){
      n <- nrow(DF)
      f <- rep_len(c(1, rep(0, N - 1)), length.out = n)
      DF[[newcol]] <- cumsum(f)
      DF
    }
    
    fun(df1, N = 5)
    

    fun这里有一个
    dplyr
    解决方案,它检查行号减去1除以5的剩余部分是否为0。如果为0,则将新列的值增加1

    dt = read.table(text = 
    "state Value 
    a    1
    b    2
    a    3
    c    4
    a    5
    e    6
    f    7
    w    8
    f    9
    s    10
    e    11
    r    12
    s    13
    s    14", header=T)
    
    library(dplyr)
    
    dt %>% mutate(Increment = cumsum((row_number()-1) %% 5 == 0))
    
    #    state Value Increment
    # 1      a     1         1
    # 2      b     2         1
    # 3      a     3         1
    # 4      c     4         1
    # 5      a     5         1
    # 6      e     6         2
    # 7      f     7         2
    # 8      w     8         2
    # 9      f     9         2
    # 10     s    10         2
    # 11     e    11         3
    # 12     r    12         3
    # 13     s    13         3
    # 14     s    14         3
    
    这是您的数据:

    df = read.table(text = 
                    "state Value 
                         a     1
                         b     2
                         a     3
                         c     4
                         a     5
                         e     6
                         f     7
                         w     8
                         f     9
                         s     10
                         e     11
                         r     12
                         s     13
                         s     14", 
                    header=T)
    
    现在可以使用
    行名
    来帮助您估算增量值。下面的代码行通过获取行索引,将它们除以
    5
    ,然后获得
    上限
    (即最接近的大整数),为您提供所需的输出

    希望有帮助。

    试试:

    rep(c(1:((nrow(df)/5)+1)),
        each=5,
        length.out=dim(df)[1])
    
    其中:

    > df$Increment<-rep(c(1:((nrow(df)/5)+1)),
    +     each=5,
    +     length.out=dim(df)[1])
    > df
       state Value Increment
    1      a     1         1
    2      b     2         1
    3      a     3         1
    4      c     4         1
    5      a     5         1
    6      e     6         2
    7      f     7         2
    8      w     8         2
    9      f     9         2
    10     s    10         2
    11     e    11         3
    12     r    12         3
    13     s    13         3
    14     s    14         3
    

    我知道这是一个不清楚的问题,但也许到目前为止对所有5个答案都投了反对票的人也可以解释问题和/或答案的错误。对于OP:至少对您尝试执行的操作的逻辑有一个清晰的认识是有帮助的,并且包括您尝试到目前为止没有给出所需输出的代码
    df$Increment <- ceiling(as.numeric(rownames(df))/5)
    
    #    state Value Increment
    # 1      a     1         1
    # 2      b     2         1
    # 3      a     3         1
    # 4      c     4         1
    # 5      a     5         1
    # 6      e     6         2
    # 7      f     7         2
    # 8      w     8         2
    # 9      f     9         2
    # 10     s    10         2
    # 11     e    11         3
    # 12     r    12         3
    # 13     s    13         3
    # 14     s    14         3
    
    rep(c(1:((nrow(df)/5)+1)),
        each=5,
        length.out=dim(df)[1])
    
    > df$Increment<-rep(c(1:((nrow(df)/5)+1)),
    +     each=5,
    +     length.out=dim(df)[1])
    > df
       state Value Increment
    1      a     1         1
    2      b     2         1
    3      a     3         1
    4      c     4         1
    5      a     5         1
    6      e     6         2
    7      f     7         2
    8      w     8         2
    9      f     9         2
    10     s    10         2
    11     e    11         3
    12     r    12         3
    13     s    13         3
    14     s    14         3
    
    dt = read.table(text = 
    "state Value 
    a    1
    b    2
    a    3
    c    4
    a    5
    e    6
    f    7
    w    8
    f    9
    s    10
    e    11
    r    12
    s    13
    s    14", header=T)