r - 如何根据其他行创建新的数据行
问题描述
我有一个abund
类似于包中使用的dune
和dune.env
数据集的数据框(vegan
数据是收集到的每个物种的丰度。
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 乘以 15(即:B3 = 15*B1 + B2),而不是仅仅添加来自 B1 + B2 的数据。
我有两个问题。
- 仅乘以某些数据行。
我尝试使用 if 语句:
wholeCalc <- function(MethodB, multiplier=15){
whole <- MethodB* multiplier
if(MethodB= "B2") {
whole <- whole/multiplier
}
}
-> 有一堆错误表明我离题了!
- 弄清楚如何根据 SampleID 和 MethodA 对数据进行分组。
我尝试了多种方法对数据进行分组,但收效甚微。
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 技能生锈了。
解决方案
推荐阅读
- python - sns.jointplot 中的类型错误
- algorithm - MST algorithm by picking minimum edge from each vertex?
- javascript - 如何将 CSS 添加到 chartJS 图像点样式?
- asp.net - 无法连接到nuget
- javascript - 按文本选择jquery中的选项
- flutter - 在 dart 中过滤具有多个下拉列表的列表
- html - 如何发送带参数的外部 html 页面
- python - 将 3D 矩阵压缩为向量数组,其中索引为向量
- java - 在 Raspbian 上下载 Java 时出错,“超过 20 个重定向”
- c++ - 请分享c++中thread_local的示例代码