我对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
任何帮助都将不胜感激。
答案 0 :(得分: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"
答案 1 :(得分: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"