我有一个存储数据的文本文件存储如下:
{{2,3,4},{1,3},{4},{1,2} .....}
我想删除括号并将其转换为两种列格式,其中第一列是括号,后跟术语
1 2
1 3
1 4
2 1
2 3
3 4
4 1
4 2
到目前为止,我已阅读文件
tab <- read.table("test.txt",header=FALSE,sep="}")
这给出了一个数据帧
V1 V2 V3 V4
1 {{2,3,4 {1,3 {4 {1,2 .....
如何进行?
答案 0 :(得分:1)
我们使用readLines
阅读,然后将{}
与strsplit
一起删除,并将其转换为带索引的两列数据框,并重新整形为“长”字样。格式为separate_rows
library(tidyverse)
v1 <- setdiff(unlist(strsplit(lines, "[{}]")), c("", ","))
tibble(index = seq_along(v1), Col = v1) %>%
separate_rows(Col, convert = TRUE)
# A tibble: 8 x 2
# index Col
# <int> <int>
#1 1 2
#2 1 3
#3 1 4
#4 2 1
#5 2 3
#6 3 4
#7 4 1
#8 4 2
或base R
方法将,
替换为}
之后的另一个分隔符,将,
分割为list
和stack
它到两列data.frame
v1 <- scan(text=gsub("[{}]", "", gsub("},", ";", lines)), what = "", sep=";", quiet = TRUE)
stack(setNames(lapply(strsplit(v1, ","), as.integer), seq_along(v1)))[2:1]
lines <- readLines(textConnection("{{2,3,4},{1,3},{4},{1,2}}"))
#reading from file
lines <- readLines("yourfile.txt")
答案 1 :(得分:1)
数据:强>
tab <- read.table(text=' V1 V2 V3 V4
1 {{2,3,4 {1,3 {4 {1,2
2 {{2,3,4 {1,3 {4 {1,2 ')
代码:使用gsub
,删除{
并将字符串拆分为,
,然后创建数据框。列名称已删除。最后,使用df1
rbindlist
中的数据框列表合并在一起
df1 <- lapply( seq_along(tab), function(x) {
temp <- data.frame( x, strsplit( gsub( "{", "", tab[[x]], fixed = TRUE ), split = "," ),
stringsAsFactors = FALSE)
colnames(temp) <- NULL
temp
} )
<强>输出:强>
data.table::rbindlist(df1)
# V1 V2 V3
# 1: 1 2 2
# 2: 1 3 3
# 3: 1 4 4
# 4: 2 1 1
# 5: 2 3 3
# 6: 3 4 4
# 7: 4 1 1
# 8: 4 2 2