gpt4 book ai didi

r - 将不等长的向量组合成一个数据帧

转载 作者:行者123 更新时间:2023-12-04 02:00:45 28 4
gpt4 key购买 nike

我有一个向量列表,它们是长度不等的时间序列。我的最终目标是在 ggplot2 中绘制时间序列图形。我想我最好先合并数据帧中的向量(其中较短的向量将用 NA 扩展),也是因为我想以表格格式导出数据,例如 .csv 以供其他人阅读。

我有一个包含所有向量名称的列表。列标题可以由最长的第一个向量设置。例如。:

> mylist
[[1]]
[1] "vector1"

[[2]]
[1] "vector2"

[[3]]
[1] "vector3"

等等。

我知道要走的路是使用哈德利的 plyr package 但我想问题是我的列表包含向量的名称,而不是向量本身,所以如果我输入:
do.call(rbind, mylist)

我得到一个单列 df,其中包含我想要合并的 dfs 的名称。
> do.call(rbind, actives)
[,1]
[1,] "vector1"
[2,] "vector2"
[3,] "vector3"
[4,] "vector4"
[5,] "vector5"
[6,] "vector6"
[7,] "vector7"
[8,] "vector8"
[9,] "vector9"
[10,] "vector10"

等等。

即使我用对象本身创建了一个列表,我也会得到一个空的数据框:
mylist <- list(vector1, vector2)
mylist
[[1]]
1 2 3 4 5 6 7 8 9 10 11 12
0.1875000 0.2954545 0.3295455 0.2840909 0.3011364 0.3863636 0.3863636 0.3295455 0.2954545 0.3295455 0.3238636 0.2443182
13 14 15 16 17 18 19 20 21 22 23 24
0.2386364 0.2386364 0.3238636 0.2784091 0.3181818 0.3238636 0.3693182 0.3579545 0.2954545 0.3125000 0.3068182 0.3125000
25 26 27 28 29 30 31 32 33 34 35 36
0.2727273 0.2897727 0.2897727 0.2727273 0.2840909 0.3352273 0.3181818 0.3181818 0.3409091 0.3465909 0.3238636 0.3125000
37 38 39 40 41 42 43 44 45 46 47 48
0.3125000 0.3068182 0.2897727 0.2727273 0.2840909 0.3011364 0.3181818 0.2329545 0.3068182 0.2386364 0.2556818 0.2215909
49 50 51 52 53 54 55 56 57 58 59 60
0.2784091 0.2784091 0.2613636 0.2329545 0.2443182 0.2727273 0.2784091 0.2727273 0.2556818 0.2500000 0.2159091 0.2329545
61
0.2556818

[[2]]
1 2 3 4 5 6 7 8 9 10 11 12
0.2824427 0.3664122 0.3053435 0.3091603 0.3435115 0.3244275 0.3320611 0.3129771 0.3091603 0.3129771 0.2519084 0.2557252
13 14 15 16 17 18 19 20 21 22 23 24
0.2595420 0.2671756 0.2748092 0.2633588 0.2862595 0.3549618 0.2786260 0.2633588 0.2938931 0.2900763 0.2480916 0.2748092
25 26 27 28 29 30 31 32 33 34 35 36
0.2786260 0.2862595 0.2862595 0.2709924 0.2748092 0.3396947 0.2977099 0.2977099 0.2824427 0.3053435 0.3129771 0.2977099
37 38 39 40 41 42 43 44 45 46 47 48
0.3320611 0.3053435 0.2709924 0.2671756 0.2786260 0.3015267 0.2824427 0.2786260 0.2595420 0.2595420 0.2442748 0.2099237
49 50 51 52 53 54 55 56 57 58 59 60
0.2022901 0.2251908 0.2099237 0.2213740 0.2213740 0.2480916 0.2366412 0.2251908 0.2442748 0.2022901 0.1793893 0.2022901


do.call(rbind.fill, mylist)
data frame with 0 columns and 0 rows

我尝试将向量转换为数据帧,但没有 cbind.fill函数,所以 plyr 提示数据帧的长度不同。

所以我的问题是:
  • 这是最好的方法吗?请记住,目标是 a) ggplot2 图和 b) 包含时间序列的表格,可在 R
  • 之外查看
  • 获取以这些对象的名称列表开头的对象列表的最佳方法是什么?
  • 突出 60 时间序列模式的最佳图表类型是什么?比例是一样的,但我预测会有很多过度绘制。由于这是一个群组分析,因此根据新近度(作为连续变量)使用颜色突出显示不同的群组可能很有用。但是如何避免过度绘图呢?差异将是最小的,因此刻面可能会让观看者无法掌握差异。
  • 最佳答案

    我认为你可能以错误的方式接近这个:

    如果您的时间序列长度不等,那么绝对最好的做法是将它们保留为时间序列和 merge他们。大多数时间序列包允许这样做。因此,您最终会得到一个多变量时间序列,并且每个值都将与同一日期正确关联。

    所以把你的时间序列放入 zoo对象,merge然后使用 my qplot.zoo function绘制它们。这将处理从 zoo 的切换成一个长数据帧。

    下面是一个例子:

    > z1 <- zoo(1:8, 1:8)
    > z2 <- zoo(2:8, 2:8)
    > z3 <- zoo(4:8, 4:8)
    > nm <- list("z1", "z2", "z3")
    > z <- zoo()
    > for(i in 1:length(nm)) z <- merge(z, get(nm[[i]]))
    > names(z) <- unlist(nm)
    > z
    z1 z2 z3
    1 1 NA NA
    2 2 2 NA
    3 3 3 NA
    4 4 4 4
    5 5 5 5
    6 6 6 6
    7 7 7 7
    8 8 8 8
    >
    > x.df <- data.frame(dates=index(x), coredata(x))
    > x.df <- melt(x.df, id="dates", variable="val")
    > ggplot(na.omit(x.df), aes(x=dates, y=value, group=val, colour=val)) + geom_line() + opts(legend.position = "none")

    关于r - 将不等长的向量组合成一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365885/

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