在小标题中循环行的同时创建新变量

时间:2018-11-15 13:58:53

标签: r tidyverse tibble

我一直在研究整个tidyverse生态系统(只是一点点),我一直在想如何解决该问题。 更笼统地说,我一直想知道如何在Transmute中编写自定义函数来处理(循环)行

我的问题:我想计算数据集的最后一行与所有其他行之间的距离度量。然后,我想将带有距离度量的向量添加到我的数据中。

这是我试图以非排字的方式做的事的最小可重现示例

data(iris)
mydata <- iris[, -5]

mydata$distance <- sapply(1:nrow(mydata), function(j){
  dist(rbind(mydata[nrow(mydata), ], mydata[j, ]))})

这有效,并且给了我我所需的东西。

但是,我为解决问题进行的整齐尝试失败了,我一直在努力解决这个问题-希望得到帮助!

mydata <- select(iris, -Species)
mydata %>% transmute(function(x){
 for (i in 1:nrow(x)) {
    dist(rbind(x[i, ],x[nrow(x), ]))
 }
})

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您希望将向量添加到数据中,则需要使用cumsum而不是mutatetransmute只会给您返回单个结果,而mutate会将列添加到数据中。

您的原始功能也可以正常使用,但是如果您想使用transmute,则需要将tidyverse换成sapply(来自map_dbl)和{ purrr的{​​1}}

rbind