每10行转换一列(约10,000行)

时间:2011-08-04 04:19:04

标签: r

我有一个包含5列的csv文件。我想将第四列csv文件转换到第10行。并且第5列csv文件需要每10行转换一次,直到列的末尾。我无法为此循环。很感谢任何形式的帮助。谢谢!

test<-read.csv("sample.csv",sep=',') 
first<-test$col4[1:10] 
t(first) 
n=length(sample.csv) 
b<-1:1000 
a<-1:10 
for(i in 1:n) { 
  second<-test[a-9:a]
}

我已经读过第4列第10行并转换它们。我想把第五列放在一个循环中并转置,然后转换'rbind'这两个。

1 个答案:

答案 0 :(得分:7)

为了简化(并检查我的理解),您的问题归结为如何重塑data.frame的单个列,以便每隔10个元素拆分此列。

基础R中有一个功能,称为unstack。您可以按如下方式在问题上使用此功能。

首先设置一些虚拟数据:

df <- data.frame(
    A=1:50,
    B=101:150
)

现在,要使用unstack,我们需要创建一个临时data.frame,其中包含我们要拆散的数据以及如何取消堆栈的指示。您的案例中的指标是1:10的重复向量,使用rep

创建
tmp <- data.frame(
    X=df$B,
    ind=rep(1:10, nrow(df)/10)
)

然后使用一些unstack魔法:

unstack(tmp, X~ind)

   X1  X2  X3  X4  X5  X6  X7  X8  X9 X10
1 101 102 103 104 105 106 107 108 109 110
2 111 112 113 114 115 116 117 118 119 120
3 121 122 123 124 125 126 127 128 129 130
4 131 132 133 134 135 136 137 138 139 140
5 141 142 143 144 145 146 147 148 149 150

将其与原始df中第一列的子集相结合:

rbind(A=df$A[1:10], unstack(tmp, X~ind))

   X1  X2  X3  X4  X5  X6  X7  X8  X9 X10
A   1   2   3   4   5   6   7   8   9  10
2 101 102 103 104 105 106 107 108 109 110
3 111 112 113 114 115 116 117 118 119 120
4 121 122 123 124 125 126 127 128 129 130
5 131 132 133 134 135 136 137 138 139 140
6 141 142 143 144 145 146 147 148 149 150