在 tibble 中循环遍历行时创建新变量
Creating a new variable while looping over rows in a tibble
我一直在研究整个 tidyverse 生态系统(只是一点点),我一直想知道如何用它解决以下问题。
更一般地说,我一直想知道如何在 transmute 中编写自定义函数来处理(循环)行
我的问题:我想计算数据集最后一行与所有其他行之间的距离度量。之后,我想将带有距离度量的向量添加到我的数据中。
这是我尝试以非 tidyverse 方式做的最小可重现示例
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j){
dist(rbind(mydata[nrow(mydata), ], mydata[j, ]))})
这行得通,满足了我的需要。
但是,我的 tidyverse 解决方案尝试失败了,我一直在努力解决这个问题 - 非常感谢您的帮助!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x){
for (i in 1:nrow(x)) {
dist(rbind(x[i, ],x[nrow(x), ]))
}
})
非常感谢!
如果您希望将矢量添加到您的数据中,您需要使用 mutate
而不是 transmute
。 transmute
仅返回单个结果,而 mutate 将列添加到数据中。
您的原始功能也可以正常工作,但如果您想完整使用 tidyverse
,您需要将 sapply
换成 map_dbl
(来自 purrr
), rbind
bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
我一直在研究整个 tidyverse 生态系统(只是一点点),我一直想知道如何用它解决以下问题。 更一般地说,我一直想知道如何在 transmute 中编写自定义函数来处理(循环)行
我的问题:我想计算数据集最后一行与所有其他行之间的距离度量。之后,我想将带有距离度量的向量添加到我的数据中。
这是我尝试以非 tidyverse 方式做的最小可重现示例
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j){
dist(rbind(mydata[nrow(mydata), ], mydata[j, ]))})
这行得通,满足了我的需要。
但是,我的 tidyverse 解决方案尝试失败了,我一直在努力解决这个问题 - 非常感谢您的帮助!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x){
for (i in 1:nrow(x)) {
dist(rbind(x[i, ],x[nrow(x), ]))
}
})
非常感谢!
如果您希望将矢量添加到您的数据中,您需要使用 mutate
而不是 transmute
。 transmute
仅返回单个结果,而 mutate 将列添加到数据中。
您的原始功能也可以正常工作,但如果您想完整使用 tidyverse
,您需要将 sapply
换成 map_dbl
(来自 purrr
), rbind
bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))