我有一个包含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'这两个。
答案 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