如何从 mutate 中的嵌套 tibble 中提取值?
How to extract value from nested tibble in mutate?
我有一个问题:
library(dplyr)
my_tib <- tibble(names = c("blah", "blah2"), data = list(1, c(2, 3)))
看起来像这样:
names data
<chr> <list>
1 blah <dbl [1]>
2 blah2 <dbl [2]>
现在我想从 mutate 子句中提取数据列的第一个元素,条件是 data
条目的第一个元素是 <10 还是 >10:
my_tib %>%
rowwise() %>%
mutate(data_min = case_when(lengths(data) == 2 ~ data[[1]],
lengths(data) == 1 & data[[1]] > 10 ~ NA_integer_,
lengths(data) == 1 & data[[1]] < 10 ~ data[[1]]))
当我运行这个时,我得到以下错误:
Error in `mutate()`:
! Problem while computing `data_min = case_when(...)`.
✖ `data_min` must be size 1, not 2.
ℹ Did you mean: `data_min = list(case_when(...))` ?
ℹ The error occurred in row 2.
Run `rlang::last_error()` to see where the error occurred.
我想得到的是
names data data_min
<chr> <list> <int>
1 blah <dbl [1]> 1
2 blah2 <dbl [2]> 2
我看过 here,但这对我的特殊情况没有帮助。
这可以在一个稍微更紧凑的选项中完成,即使用 map
遍历列表列并获得 first
观察结果,然后使用 case_when
更改 'data_min' 大于 10 并且当 lengths
不是 1 到 NA
library(purrr)
library(dplyr)
my_tib %>%
mutate(data_min = map_dbl(data, first),
data_min = case_when(lengths(data) == 1|data_min <10 ~ data_min))
在 OP 的代码中,lengths(data)
return 1 和 1 as data
的长度是 list
。相反,必须提取元素
my_tib %>%
rowwise() %>%
mutate(data_min = case_when(lengths(data[[1]]) == 2
~ data[[1]][1],
lengths(data[[1]]) == 1 & data[[1]][1] > 10 ~ NA_real_,
lengths(data[[1]]) == 1 & data[[1]][1] < 10 ~ data[[1]][1]))
-输出
# A tibble: 2 × 3
# Rowwise:
names data data_min
<chr> <list> <dbl>
1 blah <dbl [1]> 1
2 blah2 <dbl [2]> 2
我有一个问题:
library(dplyr)
my_tib <- tibble(names = c("blah", "blah2"), data = list(1, c(2, 3)))
看起来像这样:
names data
<chr> <list>
1 blah <dbl [1]>
2 blah2 <dbl [2]>
现在我想从 mutate 子句中提取数据列的第一个元素,条件是 data
条目的第一个元素是 <10 还是 >10:
my_tib %>%
rowwise() %>%
mutate(data_min = case_when(lengths(data) == 2 ~ data[[1]],
lengths(data) == 1 & data[[1]] > 10 ~ NA_integer_,
lengths(data) == 1 & data[[1]] < 10 ~ data[[1]]))
当我运行这个时,我得到以下错误:
Error in `mutate()`:
! Problem while computing `data_min = case_when(...)`.
✖ `data_min` must be size 1, not 2.
ℹ Did you mean: `data_min = list(case_when(...))` ?
ℹ The error occurred in row 2.
Run `rlang::last_error()` to see where the error occurred.
我想得到的是
names data data_min
<chr> <list> <int>
1 blah <dbl [1]> 1
2 blah2 <dbl [2]> 2
我看过 here,但这对我的特殊情况没有帮助。
这可以在一个稍微更紧凑的选项中完成,即使用 map
遍历列表列并获得 first
观察结果,然后使用 case_when
更改 'data_min' 大于 10 并且当 lengths
不是 1 到 NA
library(purrr)
library(dplyr)
my_tib %>%
mutate(data_min = map_dbl(data, first),
data_min = case_when(lengths(data) == 1|data_min <10 ~ data_min))
在 OP 的代码中,lengths(data)
return 1 和 1 as data
的长度是 list
。相反,必须提取元素
my_tib %>%
rowwise() %>%
mutate(data_min = case_when(lengths(data[[1]]) == 2
~ data[[1]][1],
lengths(data[[1]]) == 1 & data[[1]][1] > 10 ~ NA_real_,
lengths(data[[1]]) == 1 & data[[1]][1] < 10 ~ data[[1]][1]))
-输出
# A tibble: 2 × 3
# Rowwise:
names data data_min
<chr> <list> <dbl>
1 blah <dbl [1]> 1
2 blah2 <dbl [2]> 2