blend()使用所有列名作为id变量

时间:2018-09-13 12:09:23

标签: r reshape2 melt

所以,有了虚拟数据集

test_species <- c("a", "b", "c", "d", "e")
test_abundance <- c(4, 7, 15, 2, 9)
df <- rbind(test_species, test_abundance)
df <- as.data.frame(df)
colnames(df) <- c("a", "b", "c", "d", "e")
df <- dplyr::slice(df, 2)

我们得到一个类似这样的数据框:

a     b     c     d     e    
4     7     15    2     9 

我想将其转换为类似

species      abundance
a            4
b            7
c            15
d            2
e            9

使用reshape2函数melt()。我尝试了代码

melted_df <- melt(df,
              variable.name = "species", 
              value.name = "abundance")

但这告诉我:“将a,b,c,d,e用作id变量”,最终结果如下所示:

a     b     c     d     e    
4     7     15    2     9 

我在做什么错,如何解决?

2 个答案:

答案 0 :(得分:2)

您可以从一开始就使用正确的形状来定义它,仅使用基础库函数即可。

> data.frame(species=test_species, abundance=test_abundance)
  species abundance
1       a         4
2       b         7
3       c        15
4       d         2
5       e         9

答案 1 :(得分:-1)

Rbind正在添加一些奇怪的行为,我无法解释原因。

一个相当基本的解决方法是:

test_species <-c("a", "b", "c", "d", "e")
test_abundance <- c(4, 7, 15, 2, 9)
df <- data.frame(test_species, test_abundance) #skip rbind and go straight to df
colnames(df) <- c('species', 'abundance') #colnames correct

这将跳过rbind函数,并会提供所需的结果。