将字符向量转换为具有指定列数的 data.frame
Pivot a character vector to a data.frame with specified number of columns
我有一个数据向量,其中每第 4 行开始一个新观察。我需要旋转数据,使前四个值成为第一行,接下来的四个值成为第二行,依此类推。
这是一个简化的例子...
给定以下数据:
a <- rep(c("a", "b", "c", "d"), 3)
期望的输出是:
A_lab B_lab C_lab D_lab
1 a b c d
2 a b c d
3 a b c d
这是一个使用 dplyr 和 tidyverse 的选项
require(tidyverse)
a <- rep(c("a", "b", "c", "d"), 3)
labs = rep(c("A_lab", "B_lab", "C_lab", "D_lab"), 3)
obs_id <- rep(1:3, each=length(unique(a)))
tibble(vals = a, labs = labs, obs_id = obs_id) %>%
pivot_wider(obs_id, values_from = vals, names_from = labs)
# A tibble: 3 x 5
# obs_id A_lab B_lab C_lab D_lab
# <int> <chr> <chr> <chr> <chr>
#1 1 a b c d
#2 2 a b c d
#3 3 a b c d
如果你想要一个矩阵,只需调用:
matrix(a, ncol=4, byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] "a" "b" "c" "d"
[2,] "a" "b" "c" "d"
[3,] "a" "b" "c" "d"
对于 data.frame,结果通过管道传输到 data.frame:
data.frame(matrix(a, ncol=4, byrow=TRUE))
X1 X2 X3 X4
1 a b c d
2 a b c d
3 a b c d
a <- rep(c("a", "b", "c", "d"), 3)
library(tidyverse)
a %>% as.data.frame() %>% setNames('V') %>%
mutate(dummy = (( row_number() -1) %% 4)+1) %>%
pivot_wider(names_from = dummy, values_from = V, values_fn = list) %>%
unnest(everything())
#> # A tibble: 3 x 4
#> `1` `2` `3` `4`
#> <chr> <chr> <chr> <chr>
#> 1 a b c d
#> 2 a b c d
#> 3 a b c d
由 reprex package (v2.0.0)
创建于 2021-06-01
我有一个数据向量,其中每第 4 行开始一个新观察。我需要旋转数据,使前四个值成为第一行,接下来的四个值成为第二行,依此类推。
这是一个简化的例子...
给定以下数据:
a <- rep(c("a", "b", "c", "d"), 3)
期望的输出是:
A_lab B_lab C_lab D_lab
1 a b c d
2 a b c d
3 a b c d
这是一个使用 dplyr 和 tidyverse 的选项
require(tidyverse)
a <- rep(c("a", "b", "c", "d"), 3)
labs = rep(c("A_lab", "B_lab", "C_lab", "D_lab"), 3)
obs_id <- rep(1:3, each=length(unique(a)))
tibble(vals = a, labs = labs, obs_id = obs_id) %>%
pivot_wider(obs_id, values_from = vals, names_from = labs)
# A tibble: 3 x 5
# obs_id A_lab B_lab C_lab D_lab
# <int> <chr> <chr> <chr> <chr>
#1 1 a b c d
#2 2 a b c d
#3 3 a b c d
如果你想要一个矩阵,只需调用:
matrix(a, ncol=4, byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] "a" "b" "c" "d"
[2,] "a" "b" "c" "d"
[3,] "a" "b" "c" "d"
对于 data.frame,结果通过管道传输到 data.frame:
data.frame(matrix(a, ncol=4, byrow=TRUE))
X1 X2 X3 X4
1 a b c d
2 a b c d
3 a b c d
a <- rep(c("a", "b", "c", "d"), 3)
library(tidyverse)
a %>% as.data.frame() %>% setNames('V') %>%
mutate(dummy = (( row_number() -1) %% 4)+1) %>%
pivot_wider(names_from = dummy, values_from = V, values_fn = list) %>%
unnest(everything())
#> # A tibble: 3 x 4
#> `1` `2` `3` `4`
#> <chr> <chr> <chr> <chr>
#> 1 a b c d
#> 2 a b c d
#> 3 a b c d
由 reprex package (v2.0.0)
创建于 2021-06-01