我正在寻找一种方法将我的数据帧分成几行.
我的测试输入数据看起来像这样
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)
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)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |