将list转换为data.frame中的字符串

时间:2014-09-06 16:13:31

标签: r string list dataframe

我有以下data.frame,ccodealp_year是class" list"

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的内容为一个字符串(每行)。 我遇到的问题涉及多个列表条目的这些值:c(" 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"

我是否必须将它们转换为字符串,然后删除&#34; c&#34;,括号和连字符与gsub之类的东西?还是有更直接的方式?我本以为这是相当简单但不幸的是我还没有能够让它发挥作用。非常感谢。

2 个答案:

答案 0 :(得分: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"

所以即使他们打印时看起来像sigle值,它们实际上也是矢量。要转换为连续字符串,您可以执行

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 :(得分: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