2014-05-09 31 views
0

我有一個數據幀,我需要從,DF轉換:從數據幀轉換爲列表介紹因素

group  ID 
1  23143 
1  7273 
1  5578 
3  10982 
2  9722 
3  26994 
2  6497 
..  ... 

像列表:

$C1 
[1] "23143" "7273" "5578" 
$C2 
[1] "9722" "6497" 
$C3 
[1] "10982" "26994" 

我可以做到這一點:

list <- split.data.frame(df,df$group) 
list <-lapply(ss,"[[","ID) 

但這引入了ID值的因素,我該如何將此列表轉換爲字符?

回答

1

首先運行代碼options(stringsAsFactors=FALSE)以防止字符串被自動轉換爲因素。這就是說,您提供的示例數據並不會導致字符串,所以我不確定您的實際數據是否有所不同。

您的數據:

df <- data.frame(group=c(1,1,1,3,2,3,2), 
       ID=c(23143,7273,5587,10982,9722,26994,6497)) 

newlist <- split.data.frame(df,df$group) 
newlist <-lapply(newlist,`[[`,"ID") 

class(newlist[[1]]) 

[1] "numeric" 

一些字符串數據:

df2 <- data.frame(group=c(1,1,1,3,2,3,2), 
       ID=c("Joe","Sam","Rod","Mike","Steny","Larry","Chris")) 

newlist2 <- split.data.frame(df2,df2$group) 
newlist2 <-lapply(newlist2,`[[`,"ID") 

class(newlist2[[1]]) 

[1] "factor" 

隨着選項設置:

options(stringsAsFactors=FALSE) 
df3 <- data.frame(group=c(1,1,1,3,2,3,2), 
        ID=c("Joe","Sam","Rod","Mike","Steny","Larry","Chris")) 

newlist3<- split.data.frame(df3,df3$group) 
newlist3 <-lapply(newlist3,`[[`,"ID") 

class(newlist3[[1]]) 

[1] "character" 
0

你可以這樣做:

with(df, split(ID, group)) 

雖然你有一些類型的問題正在進行,可能。如果你想你的輸出是字符,你可以嘗試:

with(df, split(ID, as.character(group))) 
0

我不認爲split是引入的因素。它們必須位於原始的df data.frame中。如果你看看str(df)是否是他們的因素?如果是這樣,你如何創建該表?來自read.table?因爲通常R不會自動將明確數字的值轉換爲因子,除非該列中至少有一個非數字值。

0

也許試試colClasses = 'numeric'如果您使用read.table或其他文件讀取文件。否則,stringsAsFactors = FALSE,正如大家已經提到的。

> df <- data.frame(group=c(1,1,1,3,2,3,2), 
        ID=c(23143,7273,5587,10982,9722,26994,6497)) 
> s <- split(df$ID, df$group) 
> names(s) <- paste0("C", seq(s)) 
> s 
# $C1 
# [1] 23143 7273 5587 

# $C2 
# [1] 9722 6497 

# $C3 
# [1] 10982 26994 

> sapply(s, class) 
     C1  C2  C3 
"numeric" "numeric" "numeric"