我正在尝试将此文本数据导入R:
+1 4:1 10:1 18:1 22:1 36:1 40:1 59:1 63:1 67:1 73:1 74:1 76:1 80:1 83:1 -1 3:1 6:1 17:1 29:1 39:1 40:1 52:1 63:1 67:1 73:1 74:1 76:1 82:1 83:1 -1 2:1 6:1 14:1 19:1 39:1 42:1 52:1 64:1 68:1 72:1 74:1 76:1 80:1 98:1
哪个是
<label> <feature>:<value> <feature>:<value>...
数据仅存储那些非零的特征。因此,第一个观察是Y = 1,第4个10月18日... X的第83个特征是1.
我试图将这些标签存储在一个向量中,并将值存储在矩阵中。 扫描或read.table似乎不适用于此。所以我需要一些帮助来指出任何可能的方法。
答案 0 :(得分:1)
另一种方法。
txt <- "+1 4:1 10:1 18:1 22:1 36:1 40:1 59:1 63:1 67:1 73:1 74:1 76:1 80:1 83:1 -1 3:1 6:1 17:1 29:1 39:1 40:1 52:1 63:1 67:1 73:1 74:1 76:1 82:1 83:1 -1 2:1 6:1 14:1 19:1 39:1 42:1 52:1 64:1 68:1 72:1 74:1 76:1 80:1 98:1"
txt <- gsub("(\\-1|\\+1])","\n\\1",txt)
lines <- readLines(textConnection(txt))
parse.line <- function(line) {
lst <- strsplit(line, " ")[[1]]
mat <- do.call(rbind,lapply(lst[-1],function(x)strsplit(as.character(x),split=":")[[1]]))
data.frame(label=lst[1],mat)
}
result <- do.call(rbind, lapply(lines,parse.line))
所以这需要你的字符串(txt
)并在每个+/- 1的实例之前嵌入CR,然后使用readLines(...)
读取结果。然后我们使用parse.line(...)
将每一行解析为一个特征/值对矩阵和一个标签(+/- 1),并将它们组合成一个data.frame。最后一行将data.frames逐行绑定在一起。
这可能与其他答案类似,但我不太确定。
答案 1 :(得分:0)
假设您将数据放在名为test.txt的单行txt文件中。您可以将其作为字符串加载到R中:
library(dplyr)
library(tidyr)
file = "~/Desktop/test.txt"
read_line = readChar(file, nchars = file.info(file)$size)
从您发布的内容中看,它是空格分隔的,所以你可以这样做:
space_separated = strsplit(read_line, " ", fixed = TRUE)[[1]]
看起来标签是不包含字符':'的标签,因此您可以通过以下方式识别其位置:
find_labels = which(!grepl("\\:", space_separated))
现在最棘手的一点就是以有效的方式分割角色,你可以像这样实现它:
all_res = lapply(seq_along(find_labels), function(i){
# Create indexes that identify one label
if(i == length(find_labels))
label_subset = seq(find_labels[i], length(space_separated))
else
label_subset = seq(find_labels[i], find_labels[i + 1] - 1)
# Name of the label
the_label = space_separated[label_subset[1]]
# Value
the_subset = space_separated[label_subset[-1]]
data_frame(label = the_label, value = the_subset)
})
这将返回一个可以绑定的数据框列表:
all_res = rbind_all(all_res) %>%
separate(value, c("feature", "value"))
因此输出将是一个如下所示的数据框:
label | feature | value
+1 | 4 | 1
+1 | 10 | 1
+1 | 18 | 1
.......