I have a dataframe which consists of various variables and one particular column that has a vector in it. Is there some code to replace the value to the first vector that is found within the column?
| ID | Fees |
|---|---|
| 1 | c(420,700) |
| 2 | 400 |
| 3 | c(200,720) |
The desired Output:
| ID | Fees |
|---|---|
| 1 | 420 |
| 2 | 400 |
| 3 | 200 |
CodePudding user response:
You could loop through the vector using sapply and extracting the first value:
df$Fees <- sapply(df$Fees, "[[", 1)
CodePudding user response:
Here is another option using map and pluck to pull out the first item in the vectors:
library(tidyverse)
df %>%
mutate(Fees = map(Fees, pluck, 1))
Output
ID Fees
1 1 420
2 2 400
3 3 200
Or another option using rowwise and an index:
df %>%
rowwise %>%
mutate(Fees = Fees[1])
We could also use pluck with rowwise:
df %>%
rowwise %>%
mutate(Fees = pluck(Fees, 1))
Or we could just skip the use of purrr and use first with rowwise:
df %>%
rowwise %>%
mutate(Fees = first(Fees))
Data
df <- structure(list(ID = 1:3, Fees = list(c(420, 700), 400, c(200,
720))), row.names = c(NA, -3L), class = "data.frame")
CodePudding user response:
You can use map_dbl() from purrr to extract the n-th element of each element in a list.
library(tidyverse)
df %>%
mutate(Fee1 = map_dbl(Fees, 1))
# # A tibble: 3 × 3
# ID Fees Fee1
# <int> <list> <dbl>
# 1 1 <dbl [2]> 420
# 2 2 <dbl [1]> 400
# 3 3 <dbl [2]> 200
Data
df <- structure(list(ID = 1:3, Fees = list(c(420, 700), 400, c(200, 720))),
row.names = c(NA, -3L), class = "data.frame")
CodePudding user response:
We could do it this way:
The bottle neck is that Fees is list. With paste we make it character.
Then we use parse_number. This extracts always only the first number:
library(readr)
library(dplyr)
df %>%
mutate(Fees = parse_number(paste(Fees)))
ID Fees
1 1 420
2 2 400
3 3 200
