2014-09-06 65 views
0

我有以下data.frame,用類「清單」轉換列表中的字符串data.frame

value.change ccodealp_year 
-2.0   COD08 
5.5    LBR08 
-3.0   NER99 
-2.0   c("AGO99", "COL96") 
-1.0   c("GNB03", "SEN09") 

我想「轉換」 ccodealp_year的內容合併爲一個字符串ccodealp_year存在(每行)。 (「AGO99」,「COL96」) 和c(「GNB03」,「SEN09」);這些值與多個列表條目有關: 什麼我的目標就是要練好其內容

ccodealp_year 
COD08 
LBR08 
NER99 
AGO99, COL96 
GNB03, SEN09 

階級性的條目到目前爲止,我想通了,

e$ccodealp_year.x <- paste0(" ",unlist(e$ccodealp_year), collapse="") 

,然而,把ccodealp_year的所有條目到每一行。

[1] " COD08 LBR08 NER99 AGO99 COL96 GNB03 SEN09" 
[2] " COD08 LBR08 NER99 AGO99 COL96 GNB03 SEN09" 
[3] " COD08 LBR08 NER99 AGO99 COL96 GNB03 SEN09" 
[4] " COD08 LBR08 NER99 AGO99 COL96 GNB03 SEN09" 
[5] " COD08 LBR08 NER99 AGO99 COL96 GNB03 SEN09" 

我必須將它們轉換成字符串,然後刪除「C」,支架和連字符的東西,如GSUB?還是有更直接的方法?我會認爲這是相當簡單的,但不幸的是,我沒有能夠得到它的工作。非常感謝。

+1

也許像'sapply(yourdf $ ccodealp_year,粘貼,崩潰= 「」 的情況下, )'?你可以發佈'head(yourdf)'的輸出嗎(用你的'data.frame'的實際名稱來代替「yourdf」? – A5C1D2H2I1M1N2O1R2T1 2014-09-06 16:16:53

回答

1

我似乎無法生成打印輸出你一樣,但是從你的描述,這聽起來像你的數據是按以下格式

dd<-data.frame(value.change=c(-2,5.5,-3,-2,-1)) 
dd$ccodealp_year <- list("COD08","LBR08", "NER99", c("AGO99", "COL96"), c("GNB03", "SEN09")) 

dd 
# value.change ccodealp_year 
# 1   -2.0   COD08 
# 2   5.5   LBR08 
# 3   -3.0   NER99 
# 4   -2.0 AGO99, COL96 
# 5   -1.0 GNB03, SEN09 

str(dd) 
# 'data.frame': 5 obs. of 2 variables: 
# $ value.change : num -2 5.5 -3 -2 -1 
# $ ccodealp_year:List of 5 
# ..$ : chr "COD08" 
# ..$ : chr "LBR08" 
# ..$ : chr "NER99" 
# ..$ : chr "AGO99" "COL96" 
# ..$ : chr "GNB03" "SEN09" 

因此,即使當他們打印他們看起來像事務所價值觀,他們實際上是矢量。要轉換到concatendated字符串,你可以做

dd$ccodealp_year <- sapply(dd$ccodealp_year, paste, collapse=",") 

dd 
# value.change ccodealp_year 
# 1   -2.0   COD08 
# 2   5.5   LBR08 
# 3   -3.0   NER99 
# 4   -2.0 AGO99,COL96 
# 5   -1.0 GNB03,SEN09 

str(dd) 
# 'data.frame': 5 obs. of 2 variables: 
# $ value.change : num -2 5.5 -3 -2 -1 
# $ ccodealp_year: chr "COD08" "LBR08" "NER99" "AGO99,COL96" .. 
1

我假設,這可能是list of lists

ccodealp_year=list("COD08", "LBR08", "NER99", list(c("AGO99", "COL96")),list(c("GNB03", "SEN09"))) 
    dat <- data.frame(value.change=c(-2.0, 5.5, -3, -2, -1), I(ccodealp_year)) 

    dat 
    # value.change ccodealp_year 
    #1   -2.0   COD08 
    #2   5.5   LBR08 
    #3   -3.0   NER99 
    #4   -2.0 c("AGO99.... 
    #5   -1.0 c("GNB03.... 


    dat[,2] <- sapply(do.call(`c`,dat[,2]), paste, collapse=", ") 
    dat