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