2013-04-15 6 views
-10

Я ценю помощь с переназначения в dataframe в R. Одна из колонн, как этотR перезаказа один столбец в трех столбцах

a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 

, и я хотел бы сделать это

a b c 
d e f 
g h i 
j k l 

Как это сделать в R или c-shell?

+2

Что значит переупорядочить - вы пытаетесь превратить один столбец из 12 предметов в три столбца из четырех предметов? Если да, то как он может даже вписываться в один и тот же блок данных? –

+0

Я просто понял, что мой вопрос еще сложнее, так как я хочу, чтобы этот столбец выполнял то, что я сказал, но не изменял другие столбцы. Таким образом, в основном первая строка после переупорядочения будет abc, вторая строка будет 0 0 0, третья строка будет 0 0 0, а четвертая строка будет def, и так далее ... – user2283859

+0

Просьба привести пример своего входные данные (предпочтительно с использованием 'dput') и пример желаемого вывода. –

ответ

5
matrix(your_vector, ncol=3, byrow=TRUE) 
0

Это выполнит свою вторую версию:

orig <- matrix(letters[1:12], ncol=1) 

new[ seq(1, 1+ 4*3, by=4), ] <- matrix(orig, ncol=3, byrow=TRUE) 

> new 
     [,1] [,2] [,3] 
[1,] "a" "b" "c" 
[2,] "0" "0" "0" 
[3,] "0" "0" "0" 
[4,] "0" "0" "0" 
[5,] "d" "e" "f" 
[6,] "0" "0" "0" 
[7,] "0" "0" "0" 
[8,] "0" "0" "0" 
[9,] "g" "h" "i" 
[10,] "0" "0" "0" 
[11,] "0" "0" "0" 
[12,] "0" "0" "0" 
[13,] "j" "k" "l" 

Ключа построить несмежную последовательность строк, которые будут принимать матрицу значений символов в 4 х 3. Поскольку это матрица, она печатается с кавычками, но значения в матрицах фактически не имеют кавычек; они являются просто символами, а не цифрами.

3

merge может быть полезным здесь.

Рассмотрите следующие начальные data.frame. Две колонны, одна буква «а» на «л», следующее число 1 до 12.

mydf <- data.frame(A = letters[1:12], B = 1:12) 

Вы уже видели, что для преобразования вектора в матрицу несколько столбцов делаются с помощью matrix(your_vector...). Если вы просмотрите код для merge, вы увидите, что если вы попытаетесь объединить data.frame с matrix, матрица преобразуется в data.frame с использованием as.data.frame, что приводит к именам переменных, таких как «V1», «V2», и так далее.

Мы можем использовать все эти мелочи, чтобы построить команду merge как следующее:

merge(mydf, matrix(mydf$A, ncol = 3, byrow=TRUE), 
     by.x = "A", by.y = "V1", all.x = TRUE) 
# A B V2 V3 
# 1 a 1 b c 
# 2 b 2 <NA> <NA> 
# 3 c 3 <NA> <NA> 
# 4 d 4 e f 
# 5 e 5 <NA> <NA> 
# 6 f 6 <NA> <NA> 
# 7 g 7 h i 
# 8 h 8 <NA> <NA> 
# 9 i 9 <NA> <NA> 
# 10 j 10 k l 
# 11 k 11 <NA> <NA> 
# 12 l 12 <NA> <NA> 

Перетяжка нулями не имеет смысла, так как каждый столбец в data.frame может иметь только один тип. Таким образом, ваши нули будут преобразованы в символы или факторы.

Конечно, переименование и переупорядочение столбцов - это тривиальное упражнение, которое я оставлю читателю.

+0

спасибо! это сработало! – user2283859

+0

@ user2283859, если это решит вашу проблему, сделайте * рассмотрите * [его принятие] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Благодаря! – A5C1D2H2I1M1N2O1R2T1

Смежные вопросы