簡體   English   中英

從R中的數據框創建列表

[英]Create a list from a dataframe in R

考慮以下數據幀:

test.df <- data.frame(a = c("1991-01-01","1991-01-01","1991-02-01","1991-02-01"), b = rnorm(4), c = rnorm(4))

我想從test.df創建一個列表。 列表的每個元素都是test.df的子集數據幀,對應於column a的特定值,即每個日期。 換句話說,在這種情況下, column a采用唯一值1991-01-011991-02-01 因此,所得的列表將被由兩個部分組成:子集test.dfa = 1991-01-01 (不包括柱a ),並且該列表的其它元素將是所述子集test.df1991-02-01 = 2 (不包括a欄)。 這是我要找的輸出:

lst <- list(test.df[1:2,2:3], test.df[3:4,2:3]) 

請注意,子集數據幀可能不具有相同的行數。

在我的實際示例中,列a是具有更多值的日期列。

我將不勝感激任何幫助! 非常感謝!

你可以使用split

lst <- split(test.df, test.df$a)

如果你想擺脫列a ,使用split(test.df[-1], test.df$a) (感謝@akrun的評論)。

您可以使用以下代碼:

sapply(union(test.df$a,NULL), function(y,x) x[x$a==y,], x=test.df, simplify=FALSE)

您還可以在plyr包中使用dlply函數:

> library(plyr)

> dlply(test.df, .(a))
$`1991-01-01`
           a          b         c
1 1991-01-01  1.3658775 0.9805356
2 1991-01-01 -0.2292211 2.2812914

$`1991-02-01`
           a          b         c
1 1991-02-01 -0.2678131 0.5323250
2 1991-02-01  0.3736910 0.4988308

data.table包:

> library(data.table)

> setDT(test.df)
> dt <- test.df[, list(list(.SD)), by = a]$V1
> names(dt) <- unique(test.df$a)

> dt
$`1991-01-01`
            b         c
1:  1.3658775 0.9805356
2: -0.2292211 2.2812914

$`1991-02-01`
            b         c
1: -0.2678131 0.5323250
2:  0.3736910 0.4988308

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM