gpt4 book ai didi

r - 将 R 数据框分成几行

转载 作者:行者123 更新时间:2023-12-04 11:36:52 26 4
gpt4 key购买 nike

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

我的测试输入数据是这样的

   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)

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

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

我能够像这样计算一年的每个值,但无法将其拆分成单独的行。

data$new <- data$val/(data$yr2-data$yr1)

最佳答案

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]

)

输出

#     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

关于r - 将 R 数据框分成几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27249982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com