我有一个数据集(如下所示),并且编写了一些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,以便其更加灵活和易于输出。
谢谢!
将是all_vars
,而不是all.vars
,列名称也应在vars
中指定
library(dplyr)
filter_at(fold.change, vars(rate), all_vars(!(rate == "Control")))
如果只有一列,只需使用filter
fold.change %>%
filter(rate != 'Control')