【问题标题】:convert list to string in data.frame将列表转换为 data.frame 中的字符串
【发布时间】:2014-10-31 08:51:25
【问题描述】:

我有以下 data.frame,其中 ccodealp_year 属于“列表”类

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"

我是否必须将它们转换为字符串,然后用 gsub 之类的东西删除“c”、括号和连字符?还是有更直接的方法?我会认为这是相当简单的,但不幸的是我无法让它工作。非常感谢。

【问题讨论】:

  • 可能类似于sapply(yourdf$ccodealp_year, paste, collapse = ", ")?您能否发布head(yourdf) 的输出(用您的data.frame 的实际名称替换“yourdf”?

标签: r string list dataframe


【解决方案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"

因此,即使它们在打印时看起来像单个值,但实际上它们是向量。要转换为连接字符串,您可以这样做

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" ..

【讨论】:

    【解决方案2】:

    我假设这可能是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
    

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2016-03-03
      • 2020-08-10
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2011-02-20
      相关资源
      最近更新 更多