我有一个关于 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
任何帮助,将不胜感激。
我有一个关于 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
任何帮助,将不胜感激。
您可以将文本拆分\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,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"