基本上,我正在为数据帧寻找R版本的MATLAB> vec2mat。我有一个1 x 9数据帧(下面是oneBYnine)我想转换成3 x 3数据帧(fourBYthree):
> oneBYnine
data
1 4
2 7
3 A.1
4 6
5 5
6 1
7 A.2
8 12
9 6
10 8
11 A.3
12 15
>fourBYthree
a b c d
1 4 7 A.1 6
2 5 1 A.2 12
3 6 8 A.3 15
data<-c("4","7","A.1","6", "5","1","A.2","12", "6","8","A.3", "15")
oneBYnine<-data.frame(data)
a<-c("4","5","6")
b<-c("7","1","8")
c<-c("A.1","A.2","A.3")
d<-c("6", "12", "15")
fourBYthree<-data.frame(a,b,c,d)
我是通过创建一个虚拟计数器数据帧然后循环(在尝试重塑和tidyr之后直到我的头部爆炸)来做到这一点。
Z<- as.data.frame(matrix(1:12,nrow=4,ncol=3))
Z<-as.data.frame(t(Z))
df<- as.data.frame(matrix(NA,nrow=3,ncol=4))
for(i in 1:3)
df[i,]<-oneBYnine$data[Z[i,1]:Z[i,4]]
df
我无法弄清楚为什么有些数据争论不起作用,而且肯定有更清洁的方法。建议?
答案 0 :(得分:2)
我会通过一个矩阵:
# getting your data
oneBYnine = read.table("clipboard", stringsAsFactors = F)
mat = matrix(oneBYnine$data, ncol = 4, byrow = T)
dat = as.data.frame(mat, stringsAsFactors = F)
> dat
V1 V2 V3 V4
1 4 7 A.1 6
2 5 1 A.2 12
3 6 8 A.3 15
stringsAsFactors = F
每个列都是一个字符。您可以根据需要将它们转换为数字或因子。
答案 1 :(得分:1)
使用matrix
:
fourBYthree<-matrix(oneBYnine,nrow=3,ncol=4,byrow=T)
答案 2 :(得分:1)
t(matrix(data,nrow=4))
[,1] [,2] [,3] [,4]
[1,] "4" "7" "A.1" "6"
[2,] "5" "1" "A.2" "12"
[3,] "6" "8" "A.3" "15"