Без сложного объяснения создадим небольшой примерный фрейм данных:
A <- c(1,2,3,4)
B <- c(3,4,5,7)
C <- c(3,4,7,3)
D <- c(8,3,2,4)
df <- data.frame(A,B,C,D)
> df
A B C D
1 1 3 3 8
2 2 4 4 3
3 3 5 7 2
4 4 7 3 4
Я хотел бы вычислить процентные значения в столбцах A, B и C, используя apply
функции. Процентное значение, основанное на максимальном значении из каждой строки, другими словами:
%_to_be_calculated <- df[i,j] * 100 / max(df[i,1:3])
где j
индекс столбца A,
B
или C
; i
следующих строк в таблице.
Желаемый результат:
A B C D
1 33.33 100 100 8
2 50 100 100 3
3 42.85 71.42 100 2
4 57.14 100 42.85 4
Мое решение:
apply(df,1,function(i) lapply(i[1:3],function(j) j*100/max(i[1:3])))
Он работает, однако возвращает список списков ... Я хотел бы иметь хороший df, не могли бы вы подсказать, как заменить значения в текущем df?
Спасибо.