gpt4 book ai didi

R循环: Perform a Function for Every 3 Rows

转载 作者:行者123 更新时间:2023-12-02 04:23:44 24 4
gpt4 key购买 nike

我种了 2000 株小麦,生长了 40 天。我想对每个植物执行 coeff 函数,以找到 3 个时间点所构成的二次方程的系数。 (a、b 和 c)

(1) coef(lm(y~poly(x,2,raw=TRUE))功能完全按照我想要的方式工作。

(2) 但是,我的数据呈现方式要求我手动设置 x 和 y。

(3) 因此,我融化了我的数据,并对其进行了排序。

(4) 我想制作一个循环,将获取“Day”列中的前三个并将其设置为 x。然后我希望它获取“高度”列中的前三个并将其设置为 y。

然后我想执行coeff函数。

最后我希望它能显示我需要的系数输出,最好是在新的数据表中。

然后对所有小麦植株每三行重复一次,这代表每个小麦 ID。

1) 这个函数有效,给我系数:a, b, c

x<-c(1,2,3)
y<-c(1,10,4)
coef(lm(y~poly(x,2,raw=TRUE)))

2) 这是我的数据原来的样子

A = matrix(c(5, 4, 2, 10, 10, 4, 5, 15, 6),nrow=3, ncol=3)
colnames(A)<-c("10", "25", "40")
rownames(A)<-c("Wheat 1", "Wheat 2", "Wheat 3")
A

3) 这是我融化的格式

A.melted<-as.data.frame(melt(A, id.vars="ID"))
A.melted<-A.melted[with(A.melted,order(Var1)),]
colnames(A.melted) <- c("WheatID", "Day", "Height")
A.melted$Day<-as.numeric(as.character(A.melted$Day))
A.melted
#

4) 这就是我想用我的循环做的....

  • 每 3 行,
  • x<-A.melted[,2]
  • y<-A.melted[,3]
  • coef(lm(y~poly(x,2,raw=TRUE)))
  • 编译系数的东西:a, b, c

我只是不熟悉循环的语法,我希望得到任何提示和建议。仔细阅读 Google 告诉我,除非绝对需要,否则不应执行循环,因为我可能会遇到更多问题 - 因此我也对非循环技术持开放态度。

最佳答案

如果您想在循环中执行此操作,请尝试此操作。关键部分是将 seqby = 参数一起使用,让索引采取您需要的步骤。

library(tibble)

df <- tibble(
WheatID = rep(NA_character_, nrow(A)),
Intercept = rep(NA_real_, nrow(A)),
poly1 = rep(NA_real_, nrow(A)),
poly2 = rep(NA_real_, nrow(A))
)
cnt <- 1
for (i in seq(1, nrow(A.melted), by = 3)) {
x <- A.melted$Day[i + 0:2]
y <- A.melted$Height[i + 0:2]
df$WheatID[cnt] <- as.character(A.melted$WheatID[i])
df[cnt, 2:4] <- coef(lm(y~poly(x,2,raw=TRUE)))
cnt <- cnt + 1
}
df

注意:我不是data.table 的人。因此,我向您展示了一个tibble

关于R循环: Perform a Function for Every 3 Rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909459/

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