R 应用函数并创建新行

R 应用函数并创建新行,r,R,我有这样一个data.frame: X 1976 1977 1 6.4 6.9 2 6.3 7.0 3 6.1 7.1 4 6.0 7.2 我要创建以下内容: Qtr Value 1976.00 6.27 1976.25 ... And so on... 1977.00 7.0 1977.25 ... 等等 编辑:输出是前3个值的平均值。我道歉 有人能帮我吗?提前谢谢 罗伯特这里有一个方法 您的数据帧: dat <

我有这样一个data.frame:

X  1976  1977
1   6.4   6.9
2   6.3   7.0
3   6.1   7.1
4   6.0   7.2
我要创建以下内容:

Qtr        Value
1976.00    6.27
1976.25    ...
And so on...
1977.00    7.0
1977.25    ...
等等

编辑:输出是前3个值的平均值。我道歉

有人能帮我吗?提前谢谢

罗伯特

这里有一个方法

您的数据帧:

dat <- read.table(text = "X  1976  1977
1   6.4   6.9
2   6.3   7.0
3   6.1   7.1
4   6.0   7.2", header = TRUE, check.names = FALSE)
尝试:


我不知道您的预期输出是如何从您的输入中得出的。对不起,我确实没有说清楚。考虑到缺乏详细信息,这可能是一个长期的尝试,但我会选择类似于
tapply(df[[“1976”]],(df$X-1)%/%3,mean)
。您可能应该将示例数据放大,并使您的预期输出更清晰
agg <- aggregate(dat[-1], by = list((dat$X - 1) %/% 3), mean)
dat2 <- setNames(stack(agg[-1])[2:1], c("Qtr", "Value"))
dat2$Qtr <- agg[[1]] * 0.25 + as.numeric(as.character(dat2$Qtr))
dat2
#       Qtr    Value
# 1 1976.00 6.266667
# 2 1976.25 6.000000
# 3 1977.00 7.000000
# 4 1977.25 7.200000
ddf = structure(list(X = 1:12, `1976` = c(6.4, 6.3, 6.1, 6, 6, 6.3, 
6.1, 6, 6.4, 6.8, 6.6, 6), `1977` = c(6.9, 7, 7.1, 7.2, 7.2, 
7.1, 7.2, 7.5, 7.2, 7.6, 7.8, 7.2)), .Names = c("X", "1976", 
"1977"), class = "data.frame", row.names = c(NA, -12L))

ddf
    X 1976 1977
1   1  6.4  6.9
2   2  6.3  7.0
3   3  6.1  7.1
4   4  6.0  7.2
5   5  6.0  7.2
6   6  6.3  7.1
7   7  6.1  7.2
8   8  6.0  7.5
9   9  6.4  7.2
10 10  6.8  7.6
11 11  6.6  7.8
12 12  6.0  7.2

df2 = data.frame(qtr =numeric(), value=numeric())
rr=1; x=0; new=TRUE
for(cc in 2:3)for(i in 1:4){
    if(cc==3 & new){
        rr = 1; x=0; new=FALSE;
    }
    df2[nrow(df2)+1,1] = as.numeric(names(ddf)[cc])+x
    x = x+0.25
    df2[nrow(df2),2] = mean(ddf[rr:(rr+3),cc])
    rr = rr+4
    if(rr>12) rr = 1
}
df2
      qtr value
1 1976.00  6.20
2 1976.25  6.10
3 1976.50  6.45
4 1976.75  6.20
5 1977.00  7.05
6 1977.25  7.25
7 1977.50  7.45
8 1977.75  7.05