r语言 - 如何在列表元素之间分布数据帧的行



我有一个列表,其中包含不同证券的许多数据帧:每个证券都有一个日期和一个读数。我还有一个数据帧,该数据帧将每个证券作为一行具有额外的读取日期对。我想将附加读数附加到列表中的相应数据帧元素。

我可以通过以下方式交互式地管理它

list_name %>% map_df(slice, .id = "id") 

若要将列表转换为数据帧,请在新读数后追加 bind_rows然后拆分以转换回列表。

但是:我正在尝试将其转换为在包中使用的函数。数据中的一列是日期。作为一个独立的功能,它也可以工作。但是当打包并加载为库时,它会抛出错误:

Error in UseMethod("slice_") : 
no applicable method for 'slice_' applied to an object of class "Date"

例如,如果我有一个列表 z 和数据帧 d

b <- data.frame(Rank = c(1, 2, 3), Value = c("A", "B", "C"))
c <- data.frame(Rank = c(1, 2, 3), Value = c("A", "B", "C"))
z <- list(Z = b, Y =c)
d <- data.frame(Sec = c("B", "C"), Rank = 4, Value = c("D"))

我希望结果是

$Z
Rank Value
1    1     A
2    2     B
3    3     C
4    4     D
$Y
Rank Value
1    1     A
2    2     B
3    3     C
4    4     D

但不知道从哪里开始。我已经尝试了通常的谷歌搜索方法,但无法找到正确的词来提出答案。

一种选择是用group_splitsplit'd' 数据集,并在map2中使用它来绑定行与 'z' 的相应元素

library(tidyverse)
d %>% 
group_split(Sec, keep = FALSE) %>%
map2(z, ., bind_rows)
#$Z
#  Rank Value
#1    1     A
#2    2     B
#3    3     C
#4    4     D
#$Y
#  Rank Value
#1    1     A
#2    2     B
#3    3     C
#4    4     D

你也可以做:

Map(rbind, A= z, B = lapply(split(d,d$Sec), function(x){x[-1]}))
# $Z
#      Rank Value
# A.1    1     A
# A.2    2     B
# A.3    3     C
# B      4     D
# 
# $Y
#      Rank Value
# A.1    1     A
# A.2    2     B
# A.3    3     C
# B      4     D

最新更新