Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数据从单个观测值重新排列为多个观测值_R_Split - Fatal编程技术网

R 将数据从单个观测值重新排列为多个观测值

R 将数据从单个观测值重新排列为多个观测值,r,split,R,Split,我有一个文本文件,格式如下: x1, y1, z1, x2, y2, z2, x3, y3, z3 如果我用read.csv导入它,我有一个包含九个变量的观察值(在本例中,实际文件中的三元组数量未知) 我想重新排列数据,以获得具有三个变量的多个观测值: x1 y1 z1 x2 y2 z2 x3 y3 z3 所以我可以对每个三元组执行操作 例如,我想要转换这个 fileData <- read.table(text = "1 2 3 10 20 30 100 200 300") >

我有一个文本文件,格式如下:

x1, y1, z1, x2, y2, z2, x3, y3, z3
如果我用
read.csv
导入它,我有一个包含九个变量的观察值(在本例中,实际文件中的三元组数量未知)

我想重新排列数据,以获得具有三个变量的多个观测值:

x1 y1 z1
x2 y2 z2
x3 y3 z3
所以我可以对每个三元组执行操作

例如,我想要转换这个

fileData <- read.table(text = "1 2 3 10 20 30 100 200 300")

> fileData
  V1 V2 V3 V4 V5 V6  V7  V8  V9
1  1  2  3 10 20 30 100 200 300

我如何分割它?

不确定您的实际目标是什么,但使用基本R:

data.frame(matrix(fileData, ncol = 3, byrow = T))
这应该是你想要的

   X1  X2  X3
1   1   2   3
2  10  20  30
3 100 200 300

不确定您的实际目标是什么,但使用base R:

data.frame(matrix(fileData, ncol = 3, byrow = T))
这应该是你想要的

   X1  X2  X3
1   1   2   3
2  10  20  30
3 100 200 300

akash给出了一个很好的答案,但是如果您使用混合数据类型(数字和字符),那么它可能不起作用,因为矩阵将强制所有数据都是一种类型。另一种方法是如下所示,我们根据所需的列数对索引进行
lappy

fileData <- read.table(text = "m 2 3 a 20 30 cat 200 300")
rows = lapply(seq(3,ncol(fileData),by=3),
       function(x){
         range = paste("V",(x-2):x,sep="")
         output = fileData[,range]
         names(output) = c("x","y","z")
         return(output)
       })
do.call(rbind,rows)
#>     x   y   z
#> 1   m   2   3
#> 2   a  20  30
#> 3 cat 200 300
fileData x y z
#>1米23
#>2 a 20 30
#>3 cat 200 300

阿卡什给出了一个很好的答案,但是如果您使用混合数据类型(数字和字符),那么它可能不起作用,因为矩阵将强制所有数据都是一种类型。另一种方法是如下所示,我们根据所需的列数对索引进行
lappy

fileData <- read.table(text = "m 2 3 a 20 30 cat 200 300")
rows = lapply(seq(3,ncol(fileData),by=3),
       function(x){
         range = paste("V",(x-2):x,sep="")
         output = fileData[,range]
         names(output) = c("x","y","z")
         return(output)
       })
do.call(rbind,rows)
#>     x   y   z
#> 1   m   2   3
#> 2   a  20  30
#> 3 cat 200 300
fileData x y z
#>1米23
#>2 a 20 30
#>3 cat 200 300

谢谢,这正是我需要的谢谢,这正是我需要的谢谢。在我的具体案例中,数据并不混杂。没关系,我试图提供一个更通用的解决方案,以防将来有人遇到这个问题:)谢谢。在我的具体案例中,数据并不混杂。没关系,我试图提供一个更通用的解决方案,以防将来有人遇到这个问题:)