[英]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-01
和1991-02-01
。 因此,所得的列表將被由兩個部分組成:子集test.df
當a = 1991-01-01
(不包括柱a
),並且該列表的其它元素將是所述子集test.df
時1991-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.