我有一个包含标签名称和值的字符串列表。
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)
理想情况下,该解决方案可以处理更大的字符串列表,而无需额外的蛮力。
有兴趣听取您的想法和想法
答案 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
将"
和:
以及rbind
个list
元素拆分为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