我有一个列表,其中包含不同证券的许多数据帧:每个证券都有一个日期和一个读数。我还有一个数据帧,该数据帧将每个证券作为一行具有额外的读取日期对。我想将附加读数附加到列表中的相应数据帧元素。
我可以通过以下方式交互式地管理它
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_split
split
'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