У меня есть образцы, которые были запущены и сгенерировали данные по 8 переменным. Каждый образец имеет серию «NIL» и 3 других «версии» того же образца (иногда 4 или 5). Что мне нужно, это создать 8 новых переменных, которые будут кратными изменениями каждой версии сэмпла против NIL этого сэмпла.
Чтобы запустить это для всех переменных, я знаю, что мне нужно использовать что-то вроде mutate_at (.funs = funs (FUNCTION HERE), .vars = var1: var8). Однако я не могу понять, какую функцию использовать.
x<-c(50,25,10,5)
y<-c(100,50,25,10)
z<-c(50,25,10,5)
sample<-c("a","a","a","a")
sample_type<-c("a_bcg","a_esf","a_hiv","a_nil")
## sample_type column is the one which would serve as a reference for
## me of how these "a"s are different from each other but for
## calculation purposes we can just group by sample
test<-as.tibble(cbind(x,y,z,sample))
test<-test%>%
modify_at(c(1,2,3),as.numeric)
test%>%
group_by(sample)%>% ## since there'd be more groups
mutate_at(.funs = funs(./slice(n)),.vars = (1:3))
Это не удалось
Ошибка в mutate_impl (.data, точки):
Ошибка оценки: нет применимого метода для slice_, примененного к
объект класса "c ('double', 'numeric')".
Мне нужно создать функцию, которая принимает значение каждой строки столбца и делит его на определенную строку (в этой подгруппе) - и в этой строке есть «ноль», чтобы я мог сделать так, чтобы нулевой образец всегда может быть первым или последним в группе.
The expected would look like this
x y z sample x_1 y_1 z_1
<chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 50 100 50 a 10 10 10
2 25 50 25 b 5 5 5
3 10 25 10 c 2 2.5 2
4 5 10 5 nil 1 1 1