как объединить группу столбцов под другой группой столбцов в R - PullRequest
0 голосов
/ 04 августа 2020

Все, что я хочу сделать, это объединить столбцы [1: 3] со столбцами [4: 6].

В конечном продукте будет всего 3 длинных столбца с столбцом [4] ниже столбца [1] , столбец [5] ниже столбца [2], et c.

Все решения, которые я вижу, зависят от столбцов идентификаторов, которых нет в моих данных. Я посмотрел на gather (), stack (), melt (). Я просто хочу просто вырезать последние 3 столбца и вставить их под первыми 3 столбцами,

Ответы [ 3 ]

0 голосов
/ 04 августа 2020

Предположим, ваши данные выглядят так, как показано ниже, вы можете использовать reshape из базы R:

a <- head(cbind(iris[1:3], iris[1:3]))
a
  Sepal.Length Sepal.Width Petal.Length Sepal.Length Sepal.Width Petal.Length
1          5.1         3.5          1.4          5.1         3.5          1.4
2          4.9         3.0          1.4          4.9         3.0          1.4
3          4.7         3.2          1.3          4.7         3.2          1.3
4          4.6         3.1          1.5          4.6         3.1          1.5
5          5.0         3.6          1.4          5.0         3.6          1.4
6          5.4         3.9          1.7          5.4         3.9          1.7

Используемый код:

reshape(a, matrix(names(a), 3), dir="long")

    time Sepal.Length Sepal.Width Petal.Length id
1.1    1          5.1         3.5          1.4  1
2.1    1          4.9         3.0          1.4  2
3.1    1          4.7         3.2          1.3  3
4.1    1          4.6         3.1          1.5  4
5.1    1          5.0         3.6          1.4  5
6.1    1          5.4         3.9          1.7  6
1.2    2          5.1         3.5          1.4  1
2.2    2          4.9         3.0          1.4  2
3.2    2          4.7         3.2          1.3  3
4.2    2          4.6         3.1          1.5  4
5.2    2          5.0         3.6          1.4  5
6.2    2          5.4         3.9          1.7  6
0 голосов
/ 04 августа 2020

Если вы переименуете столбцы, чтобы они соответствовали первым, вы можете использовать функцию rbind, чтобы вставить последние три столбца под первыми тремя столбцами.

names(df) <- rep(names(df)[1:3], 2)
df <- rbind(df[,1:3], df[,4:6])
0 голосов
/ 04 августа 2020

Если все столбцы содержат один и тот же класс (т.е. целое число), вы можете просто использовать функцию rbind() для привязки столбцов [4: 6] к столбцам [1: 3].

Если они имеют различных форматов, вы можете определить новый набор данных с комбинированными столбцами:

new.data = data.frame("First"=c(data[,1],data[,4]),
                      "Second"=c(data[,2],data[,5]),
                      "Third"=c(data[,3],data[,6]))

С помощью rbind() вы можете просто добавить столбцы ниже, как в этом примере:

> dta = matrix(rep(c(1,2,3,4,5,6),6),ncol=6,byrow=T)
> print(dta)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    1    2    3    4    5    6
[3,]    1    2    3    4    5    6
[4,]    1    2    3    4    5    6
[5,]    1    2    3    4    5    6
[6,]    1    2    3    4    5    6
> rbind(dta[,1:3],dta[,4:6])
      [,1] [,2] [,3]
 [1,]    1    2    3
 [2,]    1    2    3
 [3,]    1    2    3
 [4,]    1    2    3
 [5,]    1    2    3
 [6,]    1    2    3
 [7,]    4    5    6
 [8,]    4    5    6
 [9,]    4    5    6
[10,]    4    5    6
[11,]    4    5    6
[12,]    4    5    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...