我想用 ? 对嵌套数据框的内部数据框进行子集化dplyr?
我有以下嵌套数据框:
library(dplyr)
# Initialise nested data frame
d <- tibble(group = c("A", "B"),
data = rep(list(NA), 2))
set.seed(1)
d$data[[1]] <- data.frame(x = seq(1:10),
y = rnorm(10))
d$data[[2]] <- data.frame(x = seq(1:15),
y = rnorm(15),
z = runif(15))
Run Code Online (Sandbox Code Playgroud)
假设我只想要group == "A"where数据框中的行y >= 0,而 for 数据框group == B保持不变。编辑: 操作后两个结果数据框应具有相同的变量。
我正在考虑做类似下面一行的事情,但与 mutate 命令结合使用,但filter(y >= 0)在这里不起作用。那么,我应该怎么做呢?
d %>% filter(group == "A") %>% select(data) %>% filter(y >= 0)
Run Code Online (Sandbox Code Playgroud)
我们可以通过filter在里面做 ing来做到map2
library(tidyverse)\nd %>%\n mutate(data = map2(group, data, ~\n .y %>% \n filter(!(.x == "A" & y < 0))))\n # A tibble: 2 x 2\n # group data \n # <chr> <list> \n #1 A <data.frame [6 \xc3\x97 2]> \n #2 B <data.frame [15 \xc3\x97 3]>\nRun Code Online (Sandbox Code Playgroud)\n\n使用反向比较,则为
\n\nout <- d %>%\n mutate(data = map2(group, data, ~\n .y %>%\n filter((.x == "A" & y >=0)|.x != "A")))\nout\n# A tibble: 2 x 2 \n# group data \n# <chr> <list> \n#1 A <data.frame [6 \xc3\x97 2]> \n#2 B <data.frame [15 \xc3\x97 3]>\n\nmap(d$data, dim)\n#[[1]]\n#[1] 10 2\n\n#[[2]]\n#[1] 15 3\n\nmap(out$data, dim)\n#[[1]]\n#[1] 6 2\n\n#[[2]]\n#[1] 15 3\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |