Как объединить 2 элемента данных в информационный блок? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть набор данных (показанный ниже), и я написал набор кода R для выполнения 2 основных функций: дайте мне кратное изменение для каждого из моих методов лечения по всем параметрам; и дать мне значения p для всех обработок против контроля по всем параметрам. Это сгенерировало 2 тибля через функцию суммирования. Тиббл с изменением фальца 12х5, а тиббл р.значения 10х5.

Мне нужно сделать две вещи: 1. убрать два ряда из таблицы изменений сгиба, чтобы сделать ее 10x5 2. связать два элемента (теперь оба 10x5) вместе.

Я пытался отфильтровать свои 2 контрольные процедуры из таблицы изменений сгибов, а затем связал их вместе, но я продолжаю получать ошибки.

Вот данные, все они были усреднены.

 chemistry  rate Digital biomass[mm^3] greenness average[] Height [mm]
1    Control     0             135484.07           0.2167113    86.27765
2    Flavone 0.001             135090.45           0.2025817    81.21167
3    Flavone  0.01             144547.00           0.2078100    82.85367
4    Flavone   0.1             145807.70           0.2043300    84.96300
5    Flavone     1             110408.18           0.1949033    81.48700
6    Flavone    10              53585.55           0.1850100    69.78533
7      SA3F2 0.001             158966.67           0.2051417    85.33000
8      SA3F2  0.01             167762.00           0.2113683    88.58500
9      SA3F2   0.1             159897.50           0.2021017    86.60617
10     SA3F2     1             181713.50           0.1995667    85.57567
11     SA3F2    10             136530.00           0.1964467    81.84200

Вот код, который вычисляет изменение сгиба:

  fold.change <- cleaned.averagedreps.nona %>%
    group_by(chemistry) %>%
    mutate_at(vars(3:5), ~./.[rate == '0']) 

Вот код, который вычисляет значения p.values. Это делается в наборе данных, аналогичном показанному выше, но с повторениями, чтобы t.test мог вычислить.

#add colums for p values
  #remove NA
cleaned.repdata.nona <- na.omit(cleaned.repdata)
  #seperate control
control <- cleaned.repdata.nona %>%
  filter(cleaned.repdata.nona$rate == "0")

  #process p values
broad.pvalues <- cleaned.repdata.nona %>%
  group_by(chemistry, rate) %>%
  filter(chemistry != "Control") %>%
  summarise("biomass.p" = t.test(`Digital biomass[mm^3]`, control$`Digital biomass[mm^3]`)$p.value,
            "greenness.p" = t.test(`greenness average[]`, control$`greenness average[]`)$p.value,
            "height.p" = t.test(`Height [mm]`, control$`Height [mm]`)$p.value)

Вот то, что я написал, чтобы соединить мои два куска и возникшие ошибки:

#make both dataframes the same size (i.e. remove control rows in fold change)
> fold.change <- filter_at(fold.change, all.vars(!(fold.change$rate == "Control")))
Error: `.predicate` has no matching columns
Call `rlang::last_error()` to see a backtrace
> final <- cbind(fold.change, broad.pvalues)
Error: Argument 2 must be length 12, not 10

Дайте мне знать, если у вас есть какие-либо решения. Я надеюсь превратить этот тиббл в df, чтобы он был менее привередлив и легче выводить.

Спасибо!

1 Ответ

1 голос
/ 13 марта 2020

Это будет all_vars вместо all.vars, также имена столбцов должны быть указаны в vars

library(dplyr)
filter_at(fold.change, vars(rate), all_vars(!(. == "Control")))

Если есть только один столбец, просто используйте filter

fold.change %>%
         filter(rate != 'Control')

Использование воспроизводимого примера с mtcars,

mtcars %>%
       filter_at(vars(mpg, drat, wt), all_vars(. > 3))

возвращает строки, в которых 'mpg', 'drat', 'wt' имеют все значения больше 3 в строке

...