У меня есть большой фрейм данных, похожий на набор игрушечных данных, созданный ниже
df<-data.frame("ID"=c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
'A_Frequency'=c(1,2,3,4,5,1,2,3,4,5), 'A_Axis'=c(1,2,3,4,5,1,2,3,4,5))
Фрейм данных состоит из столбца ID и двух столбцов A_Frequency и A_Axis.Я создал столбец с именем A_Slope и заполнил его следующим образом:рассчитывается от второго ряда к последнему, игнорируя первый ряд во всех случаях
for( j in id1){
for( i in 2:nrow(df[df$ID==df$ID[df$ID%in%j],])){
df$A_Slope[df$ID==df$ID[df$ID%in%j]][i]=10*log(2,
10)*log((df$A_Axis[df$ID==df$ID[df$ID%in%j]][i])/
(df$A_Axis[df$ID==df$ID[df$ID%in%j]][i-1]), base =
10)/log((df$A_Frequency[df$ID==df$ID[df$ID%in%j]]
[i])/(df$A_Frequency[df$ID==df$ID[df$ID%in%j]][i-1]),base = 10 )}}
Это хорошо работает для игрушечного набора.У меня большой массив данных с несколькими столбцами.Можно ли использовать dplyr, чтобы сделать то же самое, используя mutate.
Ожидаемый результат
ID A_Frequency A_Axis A_Slope
1 A 1 1 NA
2 A 2 2 3.010299957
3 A 3 3 3.010299957
4 A 4 4 3.010299957
5 A 5 5 3.010299957
6 B 1 1 NA
7 B 2 2 3.010299957
8 B 3 3 3.010299957
9 B 4 4 3.010299957
10 B 5 5 3.010299957
Примечание: два значения NA в столбце A_Slope также могут быть нулевыми - необязательно NA