0

我有一个关于 R 中数据操作的问题。我试图分析的“.csv”文件包含 2 列,但每列中有多种类型的数据。数据类型由分节符分隔。比如下面。

"A","B"
1,2
3,4

"C","D"
5,6
7,8

"E","F"
9,10
11,12

我想转换数据,使每个数据集成为一列。例如,我希望将上述内容转换为:

"A","B","C","D","E","F"
1,2,5,6,9,10
3,4,7,8,11,12

任何帮助,将不胜感激。

4

2 回答 2

2

您可以将文本拆分\n\n,然后使用read.csv,然后cbind一起结果

txt <- '"A","B"
1,2
3,4

"C","D"
5,6
7,8

"E","F"
9,10
11,12'

do.call(cbind, lapply(unlist(strsplit(txt, split='\n\n')), function(x) read.csv(text=x)))

##  A B C D  E  F
##  1 1 2 5 6  9 10
##  2 3 4 7 8 11 12

此外,如果您必须将文件中的内容作为 1 个字符串读取,则可以使用

txt <- readChar('temp.txt', nchars=file.info('temp.txt')$size)
txt
##  [1] "\"A\",\"B\"\r\n1,2\r\n3,4\r\n\r\n\"C\",\"D\"\r\n5,6\r\n7,8\r\n\r\n\"E\",\"F\"\r\n9,10\r\n11,12"
于 2013-04-19T02:46:54.067 回答
0

您可以使用回收来选择 1,4,7 行...然后 2,5,8 行等...例如:

  (1:9)[c(TRUE,FALSE,FALSE)]
[1] 1 4 7
> (1:9)[c(FALSE,TRUE,FALSE)]
[1] 2 5 8
> (1:9)[c(FALSE,FALSE,TRUE)]
[1] 3 6 9

使用您的数据,您可以:

dat <- read.table(text='"A","B"
1,2
3,4

"C","D"
5,6
7,8

"E","F"
9,10
11,12',sep=',')


 rbind(
  as.character(unlist(dat[c(TRUE,FALSE,FALSE),])),
unlist(dat[c(FALSE,TRUE,FALSE),]),
unlist(dat[c(FALSE,FALSE,TRUE),]))


    V11 V12 V13 V21  V22  V23 
[1,] "A" "C" "E" "B"  "D"  "F" 
[2,] "1" "4" "6" "12" "14" "10"
[3,] "3" "5" "2" "13" "15" "11"
于 2013-04-18T22:54:04.237 回答