以下代码正常工作并返回一个5行长的数据框。这正是我想要的。
distDF <- as.data.frame(gDistance(kmlIn_sp, fsl_sp, byid = TRUE)) %>%
mutate(fslID = row_number()) %>%
filter(Col1 < 1000) %>%
arrange(Col1)
输出数据框第一行的fslID
为6
。
以下代码可以自行运行,并从fslDF
数据框中返回我想要的确切值。它也适用于上面创建的fslID
数据框中的所有其他distDF
个数字。
filter(fslDF, row_number() == 6)[["TYPE"]]
但是,当我尝试将%>%
数据框distDF
传递到mutate
函数并使用上面给出的嵌套filter
函数时,例如:
distDF <- as.data.frame(gDistance(kmlIn, fslDF, byid = TRUE)) %>%
mutate(fslID = row_number()) %>%
filter(Col1 < 1000) %>%
arrange(Col1) %>%
mutate(TYPE = filter(fslDF, row_number() == fslID)[["TYPE"]])
我得到以下内容:
Error: incorrect length (5), expecting: 21
length(distDF)
是5;而length(fslDF)
是21。
有没有办法让它发挥作用?
在第一个filter
函数之前,distDF
数据帧长度为21.在第一个filter
函数之后,distDF
数据帧长度为5.因此,通过代码到达第二个mutate
函数的时间,distDF
数据帧长度为5.为什么嵌套的filter
函数在最后一直看到回到开头的数据框长度为21的管道?