У меня есть набор данных, который упрощается до чего-то подобного, давайте назовем этот набор данных B
V1 V2 V3 V4
sample1 1 2 3
sample2 4 5 6
sample3 7 8 9
, тогда у меня будет другая отдельная строка (сама по себе) с именем blank
, она будет выглядеть как-то вот так.
V1 V2 V3 V4
blank 0.5 1.0 1.5
Я бы хотел вычесть blank
во все строки B
. До сих пор я пытался:
B[,2:ncol(B)] <- lapply(B[,2:ncol(B)], function(x) x - blank[,2:ncol(blank)])
B[,2:ncol(B)] <- sweep(B[,2:ncol(B)], 1, blank[,2:ncol(blank)])
B[,2:ncol(B)] <- B[,2:ncol(B)] - blank[,2:ncol(blank)])
B[,2:ncol(B)] <- for(i in 1:nrow(B)){B[ i ,2:ncol(B)] - blank[,2:ncol(B)]}
Ничего из этого не сработало бы. Первый говорит мне, что «заменяющий элемент 1 представляет собой матрицу / данные 1 строки, нужно 3». Второй говорит мне: «STATS длиннее, чем степень dim (x) [MARGIN]», изменение поля на 2 не решает проблему. Третий говорит, что «-» определен только для фреймов данных одинакового размера ». Четвертый возвращает мне пустую матрицу.
Я просмотрел форум в меру своих возможностей, но они ограничены применением только одного значения во всем наборе данных, я хотел бы вычесть целое ряд значений по остальным строкам набора данных.
Конечный результат должен выглядеть следующим образом (округление не требуется).
V1 V2 V3 V4
sample1 0.5 1.0 1.5
sample2 3.5 4.0 4.5
sample3 6.5 7.0 7.5