如何将2个小对象合并为一个数据帧?

问题描述 投票:0回答:1

我有一个数据集(如下所示),并且编写了一些R代码来执行2个主要功能:在控制范围内,针对所有参数,给我每种治疗方法的倍数变化;并在所有参数上为我提供针对对照的所有处理的p值。这通过汇总功能生成了2个小标题。倍数变化斜率是12x5,p.value斜率是10x5。

我需要做两件事:1.从倍数变更小节中删除两行,使其变为10x52.将两个小对象(现在都是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,以便其更加灵活和易于输出。

谢谢!

r dplyr purrr stringr
1个回答
0
投票

将是all_vars,而不是all.vars,列名称也应在vars中指定

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

如果只有一列,只需使用filter

fold.change %>%
         filter(rate != 'Control')
© www.soinside.com 2019 - 2024. All rights reserved.