我有一个查询数据库并返回两个数据帧(df1和df2)的列表的函数。如果我对该函数进行迭代迭代,则会返回带有两个数据帧的嵌套列表的列表。
结果列表的结构如下:
Sub TextColorChange()
Dim xWs As Worksheet
Set xWs = Sheets("Trading Statistics")
For Row = 10 To 13
vall = xWs.Cells(Row, 51).Value
CheckPlus = InStr(1, vall, "+")
CheckMinus = InStr(1, vall, "-")
CheckDash = InStr(1, vall, "/")
part = Len(vall) - CheckDash + 1
If CheckMinus <> 0 Then
xWs.Cells(Row, 51).Characters(Start:=CheckMinus, Length:=part).Font.ColorIndex = 3
End If
If CheckPlus <> 0 Then
xWs.Cells(Row, 51).Characters(Start:=CheckPlus, Length:=part).Font.ColorIndex = 10
End If
Next Row
End Sub
--------------------------------
Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Me.Range("AY6")
If Not Intersect(Xrg, Me.Range("AY6")) Is Nothing Then
Call TextColorChange
End If
End Sub
然后,我想将数据帧组合到各自独立的大数据帧中-df1_All和df2_All。
如何从列表中提取所有df1数据帧并将它们组合成更大的数据帧?我想这是将do.call(rbind)构造与myList的apply或map函数一起使用吗?
答案 0 :(得分:1)
根据罗纳克·沙(Ronak Shah)对我的问题的评论,这是我的回答:
dfX1 <- data.frame(do.call("rbind",lapply(myList,"[[","df1")))
dfX2 <- data.frame(do.call("rbind",lapply(myList,"[[","df2")))
答案 1 :(得分:0)
编辑:以下代码无法创建所需的输出(我起草此代码后,OP澄清了预期的输出)
让我们创建一个自定义函数。您的数据帧似乎位于同一位置,所以让我们利用这种规律性:
getDataFrame <- function(mylist, wantx) {
df <- sapply(myList, `[[`, wantx)
names(df) <- paste0("Name", seq(1:length(mylist)))
df <- as_tibble(df)
return(df)
}
所以
getDataFrame(myList, 1)
返回:
# A tibble: 3 x 3
Name1 Name2 Name3
<fct> <fct> <fct>
1 A D G
2 B E H
3 C F I
类似地:
> getDataFrame(myList, 2)
# A tibble: 3 x 3
Name1 Name2 Name3
<fct> <fct> <fct>
1 1 4 7
2 2 5 8
3 3 6 9
如果您不希望它们成为因素,则必须在之后进行转换。希望这会有所帮助。
答案 2 :(得分:0)
myList %>%
pmap(.,bind_rows) %>%
bind_cols()
Value Value1
1 A 1
2 B 2
3 C 3
4 D 4
5 E 5
6 F 6
7 G 7
8 H 8
9 I 9