我有一个包含多列的数据帧,我正在使用for循环来应用记录在新列中的数学运算。该数据帧被命名为";F39";。我写的代码如下:
for (i in 2:nrow(F39)) {
#calculating distance from distance formula (both in x and y)
F39$distance[i] <- sqrt((F39$X..cm.[i]-F39$X..cm.[i-1])^2 + (F39$Y..cm.[i]-F39$Y..cm.[i-1])^2)
#calculating fish speed in x and y
F39$fishspeed[i] <- F39$distance[i]/(0.02)
#assigning 0 as the starting fish speed
F39$fishspeed[1] <- 0
#assigning positive and negative signs to the velocity
F39$fishspeed[i] <- ifelse(F39$X..cm.[i]-F39$X..cm.[i-1] < 0,F39$fishspeed[i],-F39$fishspeed[i])
}
但是,它给了我以下错误:$<-.data.frame
中的误差(*tmp*
,"距离",值=c(NA,0.194077783375631:替换有2行,数据有4837
我的数据帧中有4837行。我在许多其他数据帧中应用了相同的代码,它正在工作,但在这里和其他一些数据帧中,它不工作。
我已经在谷歌驱动器中添加了带有数据的.CSV文件:链接到CSV文件
您的data.frame缺少列"距离";。因此,它无法使用语法F39$distance[i] <- ...
在该列中保存任何值
解决方案是首先创建列,然后进行迭代,例如
F39 <- read.csv("C:/Users/kupzig.HYDROLOGY/Downloads/Fish39.csv")
names(F39) #-> no distance as column name
F39$fishspeed[1] <- 0 #assigning 0 as the starting fish speed
F39$distance <- NA #create the distance column
for (i in 2:nrow(F39)) {
#calculating distance from distance formula (both in x and y)
F39$distance[i] <- sqrt((F39$X..cm.[i]-F39$X..cm.[i-1])^2 + (F39$Y..cm.[i]-F39$Y..cm.[i-1])^2)
#calculating fish speed in x and y
F39$fishspeed[i] <- F39$distance[i]/(0.02)
#assigning positive and negative signs to the velocity
F39$fishspeed[i] <- ifelse(F39$X..cm.[i]-F39$X..cm.[i-1] < 0,F39$fishspeed[i],-F39$fishspeed[i])
}
请注意,将所有独立于i或独立于任何其他依赖于i的预步骤的操作放在循环之外是明智的。这将为您节省未来的计算时间。