【发布时间】:2020-09-12 21:24:52
【问题描述】:
我写了一段相当长的代码,本质上它根据列的值拆开一个数据框,然后创建一个新的数据框。我想使用此列的 10 个值来执行此操作,但我尝试的所有操作(例如创建函数或 for 循环)都会在某处停止。
首先我按物种身份对 df 进行子集化
ca<-df[df$species ==ca & !is.na(df$species),]
这是头(ca)
species pot A B C N A.1 B.1 C.1
1 CA 121 -34.99 -36.08 -36.10 NA NA NA
2 CA 122 -35.75 -35.29 -35.77 NA NA NA
3 CA 123 -36.94 -35.88 -36.17 NA NA NA
4 CA 124 -35.89 -34.69 -35.54 NA NA NA
5 CA 125 -35.91 -34.90 -35.85 NA NA NA
6 CA 126 -35.99 -36.24 -35.44 NA NA NA
ca 的尾巴是
species pot A B C NA_NA A.1 B.1 C.1
15 CA 135 NA NA NA NA -14.47 -27.88 -37.09
16 CA 136 NA NA NA NA -13.57 NA -36.39
17 CA 137 NA NA NA NA -14.52 -29.51 -36.54
18 CA 138 NA NA NA NA -13.53 -32.35 NA
19 CA 139 NA NA NA NA -14.34 -31.20 -36.49
20 CA 140 NA NA NA NA -14.03 -32.34 -36.51
我编写了以下代码,它成功实现了我的最终目标:
y = CA$pot[ ! is.na(CA$A.1)],
all.x = TRUE, all.y = TRUE) %>%
transmute(A.pot = x, B.pot = y) %>%
merge(y = CA[ ! is.na(CA$A), c("pot", "A", "B", "ACMI_C")],
by.x = "A.pot", by.y = "pot") %>%
merge(y = CA[ ! is.na(CA$A.1), c("pot", "A.1", "B.1", "C.1")],
by.x = "B.pot", by.y = "pot")%>%
mutate(H=(B.1-B)/(A.1 - A))
但是,我有 10 种不同身份的物种,并且需要为每次迭代运行工作流(即 for i in df$species),但它不允许我使用以下代码这样做
for(i in df$species){
species<-df[df$species =="i" & !is.na df$species],
species.index <- merge(x = species$pot[ ! is.na(species$A)],
y = species$pot[ ! is.na(species$A.1)],
all.x = TRUE, all.y = TRUE)
}
我是新手,所以任何帮助都会很棒。我也尝试创建一个函数,但没有成功。
谢谢!
【问题讨论】:
-
merge部分在您的for循环中不清楚。它表明您正在对两个向量进行子集化而不是 data.frame