Вот один пример таблицы:
data.frame(A = c(1,2,3),
B = c(2,4,2),
C = c(5,2,1),
class = c('apple', 'pear', 'banana'))
A B C class
1 2 5 apple
2 4 2 pear
3 2 1 banana
Окончательный результат, который я хочу получить:
name apple pear banana
A 1 2 3
B 2 4 2
C 5 2 1
Я пробовал оба gather()
и spread()
из пакета tidyr, но они были не так, как я хочу. К вашему сведению, размер исходной таблицы составляет 1000 * 150, поэтому мы будем очень благодарны за репродуктивный путь.
4 ответа
Вот базовое решение R с использованием транспонирования:
df <- data.frame(A,B,C, class, stringsAsFactors=FALSE)
out <- data.frame(t(df[c("A", "B", "C")]))
out <- cbind(names(df)[1:3], out)
names(out) <- c("name", df$class)
out
name apple pear banana
A A 1 2 3
B B 2 4 2
C C 5 2 1
Использование gather
и spread
даст вам желаемый результат:
> library(tidyr)
> df1 %>% gather(cols, values, A:C) %>%
spread(class, values)
cols apple banana pear
1 A 1 3 2
2 B 2 2 4
3 C 5 1 2
Вы даже можете использовать melt
и dcast
из пакета reshape2
> library(reshape2)
> dcast(melt(df1), variable ~ class)
Using class as id variables
variable apple banana pear
1 A 1 3 2
2 B 2 2 4
3 C 5 1 2
Я предлагаю использовать
t()
Функция транспонирования.
Позволять
df <- data.frame(A = c(1,2,3),
B = c(2,4,2),
C = c(5,2,1),
class = c('apple', 'pear', 'banana'))
Перед транспонированием удалите столбец, который вы хотите использовать в качестве имени столбца в конечном кадре данных. В этом случае столбец 4,
new_colnames <- df[,4]
df <- df[,-4]
Затем перенести df,
df <- t(df)
Затем установите colnames в new_colnames.
colnames(df) <- new_colnames
Преобразование столбца класса в имена строк, транспонирование, преобразование во фрейм данных и преобразование имен строк в столбец name
.
library(magrittr)
library(tibble)
DF %>%
column_to_rownames("class") %>%
t %>%
as.data.frame %>%
rownames_to_column("name")
Давая :
name apple pear banana
1 A 1 2 3
2 B 2 4 2
3 C 5 2 1
Похожие вопросы
Новые вопросы
r
R - это свободный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальный и воспроизводимый пример (ы) вместе с желаемым результатом. Используйте `dput ()` для данных и укажите все неосновные пакеты с помощью вызовов library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов, связанных со статистикой, используйте https://stats.stackexchange.com.