gpt4 book ai didi

r - 来自其他向量列的新列表列,带有 dplyr 和 rowwise

转载 作者:行者123 更新时间:2023-12-04 09:41:00 25 4
gpt4 key购买 nike

我有下面的 tibble,我想从中创建第 4 列,它是来自 A、B 和 C 的联合向量。我知道 dplyr::unite() 可以创建一个新的字符向量,但我正在寻找创建一个带有向量的列表列。

现在 rowwise 工作,但不保留输入小标题。将 A_Vector 列保留到 C_Vector 的任何建议?

这是代码:

library(tidyverse)

My_Data <- tibble(A_Vector = rnorm(10),
B_Vector = rnorm(10),
C_Vector = rnorm(10)) %>%
rowwise() %>%
do(Port_Weights = matrix(c(.$A_Vector,.$B_Vector,.$C_Vector),3,1))

结果:
Source: local data frame [10 x 1]
Groups: <by row>

# A tibble: 10 x 1
Port_Weights
* <list>
1 <dbl [3 x 1]>
2 <dbl [3 x 1]>
3 <dbl [3 x 1]>
4 <dbl [3 x 1]>
5 <dbl [3 x 1]>
6 <dbl [3 x 1]>
7 <dbl [3 x 1]>
8 <dbl [3 x 1]>
9 <dbl [3 x 1]>
10 <dbl [3 x 1]>

这不起作用:
My_Data <- tibble(A_Vector = rnorm(10),
B_Vector = rnorm(10),
C_Vector = rnorm(10)) %>%
mutate(Port_Weights = rowwise() %>% do(matrix(c(.$A_Vector,.$B_Vector,.$C_Vector),3,1)))

长版本,这显然没有意义:
My_Data <- tibble(A_Vector = rnorm(10),
B_Vector = rnorm(10),
C_Vector = rnorm(10))

Data_Unite <- My_Data %>%
rowwise() %>%
do(Port_Weights = matrix(c(.$A_Vector,.$B_Vector,.$C_Vector),3,1))

My_Data <- as.tibble(cbind(My_Data,Data_Unite))

但确实提供了追捧的结果:
# A tibble: 10 x 4
A_Vector B_Vector C_Vector Port_Weights
* <dbl> <dbl> <dbl> <list>
1 -1.23504457 -0.3750408 -0.4214122 <dbl [3 x 1]>
2 -0.90678699 0.5261914 1.1191229 <dbl [3 x 1]>
3 -0.62944085 0.5995529 0.2096462 <dbl [3 x 1]>
4 2.06171633 1.5399094 2.2972950 <dbl [3 x 1]>
5 0.08761555 0.1424207 -1.4758585 <dbl [3 x 1]>
6 -1.07334432 -1.9112787 0.4820864 <dbl [3 x 1]>
7 -0.18655423 -1.3698855 0.6672621 <dbl [3 x 1]>
8 -0.97961789 -0.8194373 -0.4158516 <dbl [3 x 1]>
9 0.68112936 -1.9864507 1.0193449 <dbl [3 x 1]>
10 0.61455438 0.5885380 -1.0925312 <dbl [3 x 1]>

最佳答案

数据:

library(tidyverse)

my_tibble <- tibble(A_Vector = rnorm(10),
B_Vector = rnorm(10),
C_Vector = rnorm(10))

要将列添加到数据框中,请使用 mutate而不是 do ,并使用 Map并行遍历三个向量并从每一行构造一个矩阵:
my_tibble %>% 
mutate(Port_Weights = Map(function(...) matrix(c(...), 3, 1), A_Vector, B_Vector, C_Vector))

# A tibble: 10 x 4
# A_Vector B_Vector C_Vector Port_Weights
# <dbl> <dbl> <dbl> <list>
# 1 0.62674726 -0.5432169 -1.66763618 <dbl [3 x 1]>
# 2 -0.47346722 -0.4436020 -1.04892634 <dbl [3 x 1]>
# 3 0.19059238 -1.6733052 2.79275828 <dbl [3 x 1]>
# 4 -0.23501873 -1.1664704 -0.19324676 <dbl [3 x 1]>
# 5 0.66552642 -1.3328070 -1.53575954 <dbl [3 x 1]>
# 6 -0.41251920 -0.2056882 1.66537220 <dbl [3 x 1]>
# 7 0.48396052 0.3968486 0.16110407 <dbl [3 x 1]>
# 8 0.43035213 -0.6433268 1.61640228 <dbl [3 x 1]>
# 9 0.06747126 -1.0146385 -0.47824193 <dbl [3 x 1]>
#10 0.79916411 -1.2349901 -0.05151402 <dbl [3 x 1]>

如果元素不必是矩阵:
my_tibble %>% mutate(Port_Weights = Map(c, A_Vector, B_Vector, C_Vector))

这相当于(使用 data.table::transpose ):
my_tibble %>% mutate(Port_Weights = data.table::transpose(as.list(.)))

关于r - 来自其他向量列的新列表列,带有 dplyr 和 rowwise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46396343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com