транспонирование столбца (около 10000 строк) для каждых 10 строк - PullRequest
1 голос
/ 04 августа 2011

У меня есть CSV-файл с 5 столбцами.Я хочу переместить 4-й столбец CSV-файла до 10-го ряда.И 5-й столбец CSV-файла необходимо преобразовать для каждых десяти строк до конца столбца.Я не могу поставить зацикливание для этого.Любая помощь очень ценится.Спасибо!

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 Ответ

7 голосов
/ 04 августа 2011

Чтобы упростить (и проверить мое понимание), ваша проблема сводится к тому, как изменить форму одного столбца 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...