将字符串列表转换为数据框,同时将字符串转换为字符串并形成值

时间:2018-02-21 16:42:32

标签: r

我有一个包含标签名称和值的字符串列表。

the_list <- c('label1\":15', 'label2\":2', 'label3\":0', 'label4\":1', 'label5\":2')

我想在\“分隔字符串:并将标签分配给一列,并将值作为此列的第一个条目。

最终结果应与此相同:

result <- data.frame(label1 = 15, label2 = 2, label3 = 0, label4 = 1, label5 = 2) 

理想情况下,该解决方案可以处理更大的字符串列表,而无需额外的蛮力。

有兴趣听取您的想法和想法

2 个答案:

答案 0 :(得分:4)

在这种特殊情况下,read.dcf可以提供帮助:

read.dcf(textConnection(the_list))
#      label1" label2" label3" label4" label5"
# [1,] "15"    "2"     "0"     "1"     "2"    

或者,考虑使用标准data.frame来存储拆分数据。以下是&#34; tidyverse&#34;的选项。和我的&#34; splitstackshape&#34;包:

library(tidyverse)
data.frame(the_list) %>% 
  separate(the_list, into = c("label", "value"), convert = TRUE)
#    label value
# 1 label1    15
# 2 label2     2
# 3 label3     0
# 4 label4     1
# 5 label5     2

library(splitstackshape)
cSplit(data.table(the_list), "the_list", "\":")
#    the_list_1 the_list_2
# 1:     label1         15
# 2:     label2          2
# 3:     label3          0
# 4:     label4          1
# 5:     label5          2

或者,只需使用命名向量:

setNames(as.numeric(sub(".*:", "", the_list)), sub("\".*", "", the_list))
# label1 label2 label3 label4 label5 
#     15      2      0      1      2 

答案 1 :(得分:1)

我们可以使用strsplit":以及rbindlist元素拆分为matrix。然后将第二列转换为list,使用第一列设置lsit元素的名称并转换为data.frame

m1 <- do.call(rbind, strsplit(the_list, '":'))
data.frame(setNames(as.list(as.integer(m1[,2])), m1[,1]))
#  label1 label2 label3 label4 label5
#1     15      2      0      1      2