这是一个示例表:
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软件包中的gather()
和spread()
,但它们不是我想要的方式。
仅供参考,原始表格的尺寸为1000 * 150,因此非常感谢您采用这种繁殖方式。
答案 0 :(得分:2)
使用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
答案 1 :(得分:2)
将class列转换为行名,转置,转换为数据框,并将行名转换为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
答案 2 :(得分:2)
这是使用转置的基础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
答案 3 :(得分:0)
我建议使用
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)
然后将名称设置为new_colnames。
colnames(df) <- new_colnames