1

我对 R 上的 tidyr::spread() 函数有疑问。

以前我运行了 melt() 函数来删除 NAs 值并缩小我的数据。

    `NPP0 <- melt(NPP, variable.names("3", "13", "14", "15", "16", "24", "25", "26"), na.rm=T)`

它工作得很好......并导致名为“变量”的列,我的“variable.names”,如上所述,以及一个具有相应值的值列。

    variable   value
2           3 2688.00
3           3 1432.00
4           13 1336.00
5           14 1152.00
8           .. 1832.00

现在我想返回并将每个变量按一列分组,对应于其分类名称。

Just checking..
str(NPP0)
'data.frame':   5783 obs. of  2 variables:
 $ variable: Factor w/ 8 levels "3","13","14",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  2688 1432 1336 1152 1832 ...

Then:

    NPP1 <-  spread(NPP0, key='variable', value='value', convert = T)

Gives:

    Error: Duplicate identifiers for rows (1, 2, 3,...)

我也尝试了 reshape2::dcast() 函数。虽然它给出了一些非常奇怪的东西:

    NPP1 <- dcast(NPP0, value ~ variable, value.var = 'value')

Aggregation function missing: defaulting to length

       value  3 13 14 15 16 24 25 26
1       0.16  0  0  0  0  0  1  0  0
2       0.92  0  7  0  0  0  0  0  0
3       1.00  0  2  0  0  0  0  0  0

Can anyone help with this?
4

2 回答 2

1

我用这个解决了:

# Removing NA values #
NPP0 <- melt(NPP, variable.names("3", "13", "14", "15", "16", "24", "25",26"), na.rm=T)

library(tidyr)

NPP1 <- as.data.frame (NPP0 %>% 
  group_by(variable) %>% 
  mutate(id = row_number()) %>% 
  spread(variable, value) )

Which gives:
View(NPP1)
[Reulting dataframe][1]

  [1]: https://i.stack.imgur.com/kI1HD.png

tHANK you for helping..
于 2018-05-15T03:37:36.930 回答
0

您的数据没有任何行标识符。这可能是原因。

NPP0$samples<-rownames(NPP0)
NPP1 <-  spread(NPP0, key='variable', value='value', fill=0)

试试吧,我希望它有效。

于 2018-05-08T21:45:53.827 回答