问题描述
我写了一段很长的代码,从本质上讲,它会根据列的值拆分一个数据帧,然后创建一个新的数据帧。我想使用此列的10个值,但是我尝试的所有事情(例如,创建函数或for循环)都停滞在某个地方。
首先,我根据物种身份将df子集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),"A.1","B.1","C.1")],by.x = "B.pot",by.y = "pot")%>%
mutate(H=(B.1-B)/(A.1 - A))
但是,我有10种不同的物种身份,并且需要为每次迭代运行工作流(例如,对于df $ species中的i),但不允许我使用以下代码进行操作
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.y = TRUE)
}
我对此并不陌生,所以任何帮助都会很棒。我还尝试创建一个函数,但没有成功。
谢谢!
解决方法
在这里,i
是每个“物种”的值,也应该是unique
。子集发生在文字“ i”上,而不是i
un1 <- levels(df$species)
species_list <- vector('list',length(un1))
for(i in seq_along(un1)){
species <- df[df$species == un1[i] & !is.na df$species),],species_list[[i]] <- merge(x = species[!is.na(species$A),y = species[!is.na(species$A.1),all.x = TRUE,all.y = TRUE)
}