我有一个数据框(abund
)与dune
包中使用的dune.env
和vegan
数据集相似,除了前三列总结了sampleID和两种方法用于收集数据。数据是收集的每种物种的丰度。
SampleID MethodA MethodB SpA SpB SpC ...
18001 A1 B1 0 3 4
18001 A1 B2 1 5 0
18001 A2 B1 0 7 0
18001 A2 B2 0 11 0
18002 A1 B1 4 1 0
18002 A1 B2 0 0 3
18002 A2 B1 0 0 0
18002 A2 B2 0 8 2
18003 A1 B1 0 9 0
....
我想基于此数据创建一个新的数据集(whole
),但仅将SampleID和MethodA作为行标识符。
SampleID MethodA MethodB SpA SpB SpC ...
18001 A1 B3 1 8 4
18001 A2 B3 0 18 0
18002 A1 B3 4 1 3
18002 A2 B3 0 8 2
18003 A1 B3 0 9 1
....
一个额外的问题是,我不仅想将B1 + B2中的数据相加,还想将B1乘以15(即:B3 = 15 * B1 + B2)。
我有两个问题。
我尝试使用if语句:
wholeCalc <- function(MethodB, multiplier=15){
whole <- MethodB* multiplier
if(MethodB= "B2") {
whole <- whole/multiplier
}
}
->出现了很多错误,表明我离目标很远!
我尝试了多种方式对数据进行分组,但没有成功。
aggregate(abund,
list(Group=replace(rownames(abund$MethodB),
rownames(abund$MethodB)
%in%
c("B1","B2"),
"B3")),
sum)
->我收到一个错误,指出参数必须具有相同的长度(即B1和B2)。
whole <- abund %>%
group_by(SampleID, MethodA)
whole
->这给了我与开始时相同的数据集。
rbind(abund,
c(MethodB = "B3",
abund[abund$MethodB == "B1", -3] +
abund[abund$MethodB == "B2", -3]))
->这给我一个错误,因为B1和B2的行数不匹配。
您可能会看到,我完全迷路了,需要一些帮助!过去几个月来我一直在实验室里工作,让我的R技能变得生疏。