Creating a new variable while looping over rows in a tibble
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I have been delving into the whole tidyverse ecosystem (just a little bit) and I have been wondering how to solve the follwing problem with it.
More in general, I have been wondering how to write custom functions in transmute which deal with (loops over) rows
My problem: I would like to compute a distance metric between the last row of my dataset and all other rows. Afterwards, I would like to add the vector with the distance metrics to my data.
Here is a minimum reproducible example of what I am trying to do in a non-tidyverse way
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j)
dist(rbind(mydata[nrow(mydata), ], mydata[j, ])))
This works and gives me what I need.
However, my tidyverse attempt for a solution is failing and I have been banging my head on this problem - would appreciate the help!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x)
for (i in 1:nrow(x))
dist(rbind(x[i, ],x[nrow(x), ]))
)
Thanks a lot!
r tidyverse tibble
add a comment |
I have been delving into the whole tidyverse ecosystem (just a little bit) and I have been wondering how to solve the follwing problem with it.
More in general, I have been wondering how to write custom functions in transmute which deal with (loops over) rows
My problem: I would like to compute a distance metric between the last row of my dataset and all other rows. Afterwards, I would like to add the vector with the distance metrics to my data.
Here is a minimum reproducible example of what I am trying to do in a non-tidyverse way
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j)
dist(rbind(mydata[nrow(mydata), ], mydata[j, ])))
This works and gives me what I need.
However, my tidyverse attempt for a solution is failing and I have been banging my head on this problem - would appreciate the help!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x)
for (i in 1:nrow(x))
dist(rbind(x[i, ],x[nrow(x), ]))
)
Thanks a lot!
r tidyverse tibble
add a comment |
I have been delving into the whole tidyverse ecosystem (just a little bit) and I have been wondering how to solve the follwing problem with it.
More in general, I have been wondering how to write custom functions in transmute which deal with (loops over) rows
My problem: I would like to compute a distance metric between the last row of my dataset and all other rows. Afterwards, I would like to add the vector with the distance metrics to my data.
Here is a minimum reproducible example of what I am trying to do in a non-tidyverse way
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j)
dist(rbind(mydata[nrow(mydata), ], mydata[j, ])))
This works and gives me what I need.
However, my tidyverse attempt for a solution is failing and I have been banging my head on this problem - would appreciate the help!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x)
for (i in 1:nrow(x))
dist(rbind(x[i, ],x[nrow(x), ]))
)
Thanks a lot!
r tidyverse tibble
I have been delving into the whole tidyverse ecosystem (just a little bit) and I have been wondering how to solve the follwing problem with it.
More in general, I have been wondering how to write custom functions in transmute which deal with (loops over) rows
My problem: I would like to compute a distance metric between the last row of my dataset and all other rows. Afterwards, I would like to add the vector with the distance metrics to my data.
Here is a minimum reproducible example of what I am trying to do in a non-tidyverse way
data(iris)
mydata <- iris[, -5]
mydata$distance <- sapply(1:nrow(mydata), function(j)
dist(rbind(mydata[nrow(mydata), ], mydata[j, ])))
This works and gives me what I need.
However, my tidyverse attempt for a solution is failing and I have been banging my head on this problem - would appreciate the help!
mydata <- select(iris, -Species)
mydata %>% transmute(function(x)
for (i in 1:nrow(x))
dist(rbind(x[i, ],x[nrow(x), ]))
)
Thanks a lot!
r tidyverse tibble
r tidyverse tibble
edited Nov 15 '18 at 14:02
iod
4,4632726
4,4632726
asked Nov 15 '18 at 13:58
Jean_NJean_N
486
486
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
If you're looking to add the vector to your data, you'd want to use mutate
rather than transmute
. transmute
just gives you back the single result while mutate adds the column to the data.
You original function works as well, but if you want to go full tidyverse
you'd be swapping out sapply
for map_dbl
(from purrr
), and rbind
for bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53321103%2fcreating-a-new-variable-while-looping-over-rows-in-a-tibble%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you're looking to add the vector to your data, you'd want to use mutate
rather than transmute
. transmute
just gives you back the single result while mutate adds the column to the data.
You original function works as well, but if you want to go full tidyverse
you'd be swapping out sapply
for map_dbl
(from purrr
), and rbind
for bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
add a comment |
If you're looking to add the vector to your data, you'd want to use mutate
rather than transmute
. transmute
just gives you back the single result while mutate adds the column to the data.
You original function works as well, but if you want to go full tidyverse
you'd be swapping out sapply
for map_dbl
(from purrr
), and rbind
for bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
add a comment |
If you're looking to add the vector to your data, you'd want to use mutate
rather than transmute
. transmute
just gives you back the single result while mutate adds the column to the data.
You original function works as well, but if you want to go full tidyverse
you'd be swapping out sapply
for map_dbl
(from purrr
), and rbind
for bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
If you're looking to add the vector to your data, you'd want to use mutate
rather than transmute
. transmute
just gives you back the single result while mutate adds the column to the data.
You original function works as well, but if you want to go full tidyverse
you'd be swapping out sapply
for map_dbl
(from purrr
), and rbind
for bind_rows
mydata <- select(iris, -Species) %>%
mutate(distance = map_dbl(1:nrow(mydata), ~dist(bind_rows(mydata[nrow(mydata), ], mydata[.x, ]))))
answered Nov 15 '18 at 14:37
Jake KauppJake Kaupp
5,74721428
5,74721428
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
add a comment |
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
thank you very much, Jake! I didn't know about purrr, I will look into it! cheers
– Jean_N
Nov 15 '18 at 15:36
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53321103%2fcreating-a-new-variable-while-looping-over-rows-in-a-tibble%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown