使用pivot_wider,但得到多行?

disho6za  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(127)

我希望有人能帮助我。我有一组来自几个子地块的植被数据,我需要为我的MC项目做一个Kmean聚类分析,所以我希望有人能帮助我,因为我离R-shark很远!
我的df看起来像这样:

| Number_ID |    ID    | species_name |    PP_abundance    | 
| --------  | -------- | Alchemilla   |         0          |
|    1      |    A_1   | Antennaria   |         0          |
|    2      |    A_1   | Arabis       |         0          |
|    3      |    A_1   | Bartsia      |         0          |
|    4      |    A_1   | Betula       |         0          |
|    5      |    A_1   | Bistorta     |         0          |
|    6      |    A_1   | Carex        |         0          |
ect.         ect.       ect.           ect.

然后使用以下代码:

df_wide <- df %>%
  pivot_wider(names_from = species_name, values_from = PP_abundance)

我把它改为:

| Number_ID |    ID    | Alchemilla   |    Antennaria      | Arabis  | Bartsia  | ECT. 
| --------  | -------- | --------     | -------------      | -----   | -----    | ECT. 
|    1      |    A_1   |     0        |         NA         |    NA   |   NA     | ECT.
|    2      |    A_1   |     NA       |         1          |    NA   |   NA     | ECT.
|    3      |    A_1   |     NA       |         NA         |    0    |   NA     | ECT.
|    4      |    A_1   |     NA       |         NA         |    NA   |   2      | ECT.
|    5      |    A_1   |     NA       |         NA         |    NA   |   NA     | ECT.
|    6      |    A_1   |     NA       |         NA         |    NA   |   NA     | ECT.

更多信息,ID是次要情节。他们在一个网格上,从A-M和1-15(有超过70列的物种名称)。所以现在我有几千行数据,但大多数都是重复的,在物种列中只有一个丰度数据。我的问题是,我如何合并/分组行,使我只有一行A1,B3,C14,D 7等,但仍然保留物种列和丰度数据的总和?
所以它看起来像这样:

| Number_ID |    ID    | Alchemilla   |    Antennaria      | Arabis  | Bartsia  | ECT. 
| --------  | -------- | --------     | -------------      | -----   | -----    | ECT. 
|    1      |    A_1   |     0        |         1          |    0    |   2      | ECT.
|    2      |    A_2   |     3        |         0          |    1    |   0      | ECT.
|    3      |    A_3   |     0        |         3          |    0    |   1      | ECT.
|    4      |    A_4   |     2        |         4          |    0    |   2      | ECT.
|    5      |    A_5   |     0        |         2          |    1    |   0      | ECT.
|    6      |    A_6   |     0        |         0          |    0    |   1      | ECT.

有谁知道如何写,使行是唯一的?
(And如果任何人知道如何继续与Kmean代码,也将不胜感激!我以前

#Compute k-means with k = 8
set.seed(123)
km.res <- kmeans(df_wide, 8, nstart = 25)

但我不能这样做,而有NA在我的DF。)
/干杯比尔克
我尝试了几行不同的代码,比如:

df_merged <- df_wide %>%
  group_by(ID) %>%
  summarize_all(funs(sum(., na.rm = TRUE)))

但这只给了我一个包含合并子图数据的一列DF,但它丢弃了物种名称和丰度数据

carvr3hs

carvr3hs1#

回答我自己的问题(如果有人错过了评论)。正如@Onyambu所指出的,“Number_Id”列具有唯一的id,使得行是唯一的,无论“ID”是否在其他行之间共享。也就是说,“Number_ID”阻止了数据透视表的扩展。
删除“Number_ID”列起了作用,我的数据现在是一个widend格式,子图作为唯一的行,看起来像我发布的想要的例子(但没有“Number_id”列)

相关问题