![](/img/trans.png)
[英]How to convert rows that contain same value for one column but different for other columns into one single row using R?
[英]How to convert one single column to row in R?
這是一個示例表:
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
我已經從tidyr包中嘗試了collect gather()
和spread()
,但是它們不是我想要的方式。 僅供參考,原始表格的尺寸為1000 * 150,因此非常感謝您采用這種繁殖方式。
使用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
您甚至可以使用reshape2包中的melt
和dcast
> 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
將類列轉換為行名,轉置,轉換為數據框,並將行name
轉換為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解決方案:
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
我建議使用
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.