将R数据帧拆分为多行

neb*_*oso 2 split r dataframe

我正在寻找一种方法将我的数据帧分成几行.

我的测试输入数据看起来像这样

   data <- read.table(text ="group;  yr1; yr2; val; col2
    a;  1927;   1934;   -140; coltest
    a;  1953;   1955;   -480; coltest
    b;  1957;   1958;   -280; coltest1
    b;  1961;   1965;   -1420; coltest1 ", sep=";", header=T,stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种计算每年价值的方法,并将其写成如下所示:

group; yr1;    yr2;   val;   col2
    a; 1927; 1928;    -20;   coltest 
    a; 1928; 1929;    -20;   coltest
    a; 1929; 1930;    -20;   coltest
    a; 1930; 1931;    -20;   coltest
    a; 1931; 1932;    -20;   coltest
    a; 1932; 1933;    -20;   coltest
    a; 1933; 1934;    -20;   coltest
    a; 1953; 1954;   -240;   coltest
    a; 1954; 1955;   -240;   coltest
    b; 1957; 1958;   -280;   coltest1
    b; 1961; 1962;   -355;   coltest1
    b; 1962; 1963;   -355;   coltest1
    b; 1963; 1964;   -355;   coltest1
    b; 1964; 1965;   -355;   coltest1
Run Code Online (Sandbox Code Playgroud)

我可以像这样计算一年的每个值,但无法将其拆分为单独的行.

data$new <- data$val/(data$yr2-data$yr1)
Run Code Online (Sandbox Code Playgroud)

The*_*Man 5

library(data.table)
setDT(data)
data[,SNO := .I]
data[,val := val / (yr2 - yr1)]
(data[,
     list(yr = yr1:(yr2-1), val),
     by = list(group,SNO)
     ][,
       SNO := NULL
       ][,
         yr2 := yr + 1]

)
Run Code Online (Sandbox Code Playgroud)

产量

#     group   yr  val  yr2
#  1:     a 1927  -20 1928
#  2:     a 1928  -20 1929
#  3:     a 1929  -20 1930
#  4:     a 1930  -20 1931
#  5:     a 1931  -20 1932
#  6:     a 1932  -20 1933
#  7:     a 1933  -20 1934
#  8:     a 1953 -240 1954
#  9:     a 1954 -240 1955
# 10:     b 1957 -280 1958
# 11:     b 1961 -355 1962
# 12:     b 1962 -355 1963
# 13:     b 1963 -355 1964
# 14:     b 1964 -355 1965
Run Code Online (Sandbox Code Playgroud)