更改 tibbles 列表中特定行的值
change values of specific rows of a list of tibbles
我对 R 还很陌生,所以我仍然有一些基本问题。我正在处理包含 8760 个 tibbles 的 tibbles 列表。每个 tibble 有 5 行数据和 420 列。我想要做的是为每个 tibble 更改特定行的前 40 个值。我如何 select tibbles 中的变量?
所以我想从逻辑上讲它会像下面这样。我知道语法错误。它只是为了让你得到这个想法:
data.list["data"] %>%
data["pn"](0:40) = 0]
如果有人能给我指出正确的方向,我会很高兴。
我现在尝试了这个:
daten_pn <- readr::read_rds("./data/testdaten.rds") (8760 obs of 2 variables)
daten = daten_pn["data"] (selecting the first variable aka the tibbles)
set <- function(x) { x = x*0 return(x) }
test = purrr::map(daten[["pn"]], set)
为了将它们全部设置为零。但是我得到的是一个空列表。
这里有一个类似的例子:
a = list(
mtcars %>% as_tibble() %>% select(-vs),
mtcars %>% as_tibble() %>% sample_n(17)
)
> a
[[1]]
# A tibble: 32 x 10
mpg cyl disp hp drat wt qsec am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 1 4 4
2 21 6 160 110 3.9 2.88 17.0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 0 4 4
# ... with 22 more rows
[[2]]
# A tibble: 17 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 17.8 6 168. 123 3.92 3.44 18.9 1 0 4 4
2 15.2 8 304 150 3.15 3.44 17.3 0 0 3 2
3 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2
4 21 6 160 110 3.9 2.88 17.0 0 1 4 4
5 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
6 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
7 26 4 120. 91 4.43 2.14 16.7 0 1 5 2
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1
10 15 8 301 335 3.54 3.57 14.6 0 1 5 8
11 10.4 8 460 215 3 5.42 17.8 0 0 3 4
12 17.3 8 276. 180 3.07 3.73 17.6 0 0 3 3
13 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
14 16.4 8 276. 180 3.07 4.07 17.4 0 0 3 3
15 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
16 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
17 21.5 4 120. 97 3.7 2.46 20.0 1 0 3 1
现在我想更改小标题中某一列的值。就像“在两个小标题中将 cyl 的前 5 个值设置为 0”。
祝福
这是 purrr::map
的解决方案。
library(tidyverse)
a <- list(
mtcars %>% as_tibble() %>% select(-vs),
mtcars %>% as_tibble() %>% sample_n(17)
)
map(a, ~{
.x[1:5, "cyl"] <- 0
.x
})
#> [[1]]
#> # A tibble: 32 x 10
#> mpg cyl disp hp drat wt qsec am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 0 160 110 3.9 2.62 16.5 1 4 4
#> 2 21 0 160 110 3.9 2.88 17.0 1 4 4
#> 3 22.8 0 108 93 3.85 2.32 18.6 1 4 1
#> 4 21.4 0 258 110 3.08 3.22 19.4 0 3 1
#> 5 18.7 0 360 175 3.15 3.44 17.0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 0 4 4
#> # … with 22 more rows
#>
#> [[2]]
#> # A tibble: 17 x 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 27.3 0 79 66 4.08 1.94 18.9 1 1 4 1
#> 2 13.3 0 350 245 3.73 3.84 15.4 0 0 3 4
#> 3 21.4 0 258 110 3.08 3.22 19.4 1 0 3 1
#> 4 21 0 160 110 3.9 2.62 16.5 0 1 4 4
#> 5 21.5 0 120. 97 3.7 2.46 20.0 1 0 3 1
#> 6 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 7 26 4 120. 91 4.43 2.14 16.7 0 1 5 2
#> 8 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 9 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> 11 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 12 17.8 6 168. 123 3.92 3.44 18.9 1 0 4 4
#> 13 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> 14 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
#> 15 15.2 8 276. 180 3.07 3.78 18 0 0 3 3
#> 16 19.2 8 400 175 3.08 3.84 17.0 0 0 3 2
#> 17 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6
由 reprex package (v0.3.0)
于 2021-02-08 创建
我对 R 还很陌生,所以我仍然有一些基本问题。我正在处理包含 8760 个 tibbles 的 tibbles 列表。每个 tibble 有 5 行数据和 420 列。我想要做的是为每个 tibble 更改特定行的前 40 个值。我如何 select tibbles 中的变量?
所以我想从逻辑上讲它会像下面这样。我知道语法错误。它只是为了让你得到这个想法:
data.list["data"] %>%
data["pn"](0:40) = 0]
如果有人能给我指出正确的方向,我会很高兴。
我现在尝试了这个:
daten_pn <- readr::read_rds("./data/testdaten.rds") (8760 obs of 2 variables)
daten = daten_pn["data"] (selecting the first variable aka the tibbles)
set <- function(x) { x = x*0 return(x) }
test = purrr::map(daten[["pn"]], set)
为了将它们全部设置为零。但是我得到的是一个空列表。
这里有一个类似的例子:
a = list(
mtcars %>% as_tibble() %>% select(-vs),
mtcars %>% as_tibble() %>% sample_n(17)
)
> a
[[1]]
# A tibble: 32 x 10
mpg cyl disp hp drat wt qsec am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 1 4 4
2 21 6 160 110 3.9 2.88 17.0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 0 4 4
# ... with 22 more rows
[[2]]
# A tibble: 17 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 17.8 6 168. 123 3.92 3.44 18.9 1 0 4 4
2 15.2 8 304 150 3.15 3.44 17.3 0 0 3 2
3 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2
4 21 6 160 110 3.9 2.88 17.0 0 1 4 4
5 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
6 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
7 26 4 120. 91 4.43 2.14 16.7 0 1 5 2
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1
10 15 8 301 335 3.54 3.57 14.6 0 1 5 8
11 10.4 8 460 215 3 5.42 17.8 0 0 3 4
12 17.3 8 276. 180 3.07 3.73 17.6 0 0 3 3
13 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
14 16.4 8 276. 180 3.07 4.07 17.4 0 0 3 3
15 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
16 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
17 21.5 4 120. 97 3.7 2.46 20.0 1 0 3 1
现在我想更改小标题中某一列的值。就像“在两个小标题中将 cyl 的前 5 个值设置为 0”。
祝福
这是 purrr::map
的解决方案。
library(tidyverse)
a <- list(
mtcars %>% as_tibble() %>% select(-vs),
mtcars %>% as_tibble() %>% sample_n(17)
)
map(a, ~{
.x[1:5, "cyl"] <- 0
.x
})
#> [[1]]
#> # A tibble: 32 x 10
#> mpg cyl disp hp drat wt qsec am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 0 160 110 3.9 2.62 16.5 1 4 4
#> 2 21 0 160 110 3.9 2.88 17.0 1 4 4
#> 3 22.8 0 108 93 3.85 2.32 18.6 1 4 1
#> 4 21.4 0 258 110 3.08 3.22 19.4 0 3 1
#> 5 18.7 0 360 175 3.15 3.44 17.0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 0 4 4
#> # … with 22 more rows
#>
#> [[2]]
#> # A tibble: 17 x 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 27.3 0 79 66 4.08 1.94 18.9 1 1 4 1
#> 2 13.3 0 350 245 3.73 3.84 15.4 0 0 3 4
#> 3 21.4 0 258 110 3.08 3.22 19.4 1 0 3 1
#> 4 21 0 160 110 3.9 2.62 16.5 0 1 4 4
#> 5 21.5 0 120. 97 3.7 2.46 20.0 1 0 3 1
#> 6 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 7 26 4 120. 91 4.43 2.14 16.7 0 1 5 2
#> 8 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 9 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> 11 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 12 17.8 6 168. 123 3.92 3.44 18.9 1 0 4 4
#> 13 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> 14 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
#> 15 15.2 8 276. 180 3.07 3.78 18 0 0 3 3
#> 16 19.2 8 400 175 3.08 3.84 17.0 0 0 3 2
#> 17 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6
由 reprex package (v0.3.0)
于 2021-02-08 创建