【问题标题】:Match rows and columns of two dataframes/tibble and copy values匹配两个数据框/小标题的行和列并复制值
【发布时间】:2019-12-17 13:55:35
【问题描述】:

我有两个数据框/小标题。

第一个(除第一列外用零初始化):

> df_
# A tibble: 33 x 101
   sample_id  SOM1  SOM2  SOM3  SOM4  ..... SOM100
   <fct>     <dbl> <dbl> <dbl> <dbl> 
 1 1             0     0     0     0 
 2 2             0     0     0     0
 3 3             0     0     0     0
 4 4             0     0     0     0     
 5 5             0     0     0     0     
.
.
.  33

第二个:

> sum
# A tibble: 3,300 x 3
# Groups:   sample_id [33]
   sample_id cluster_id count
   <fct>     <chr>      <int>
 1 1         SOM1         875
 2 1         SOM2        1102
 3 1         SOM3        1028
 4 1         SOM4         925
 5 1         SOM5       10164
 6 1         SOM6        5425
 7 1         SOM7        1593
 8 1         SOM8         290
 9 1         SOM9        6180
10 1         SOM10      10850
# … with 3,290 more rows

我想将 "sample_id"sum 匹配到 "sample_id"df_ 并将 "cluster_id"sum 匹配到来自 df_ 的列名,如果两个条件都匹配,则复制从sumdf_ 中发现条件为真的单元格的"count" 列中的相应值。最后,我想用sumcount cloumn 中的值替换df_ 中的所有零。

我希望我的最终结果看起来像下面的数据框。

> df_
# A tibble: 33 x 101
   sample_id  SOM1  SOM2  SOM3  SOM4  ..... SOM100
   <fct>     <dbl> <dbl> <dbl> <dbl> 
 1 1           875  1102  1028   925 
 2 2             0     0     0     0
 3 3             0     0     0     0
 4 4             0     0     0     0     
 5 5             0     0     0     0     
.
.
.  33

任何帮助或建议将不胜感激。

【问题讨论】:

  • 你可以用tidyverse,然后sum %&gt;% spread(cluster_id, count, fill = 0)
  • @DavidKlotz 太棒了!!谢谢。它奏效了。
  • 请注意,您可能希望给 tibble 起一个不同的名称,因为 sum 是一个基本函数
  • 是的,这是一个临时的。我会给一个更明智的名字。 :)
  • @DavidKlotz btw 在传播后我的列名没有排序。这就像 SOM1 SOM10 而不是 SOM1 SOM2 ...

标签: r dataframe data-science tidyverse tibble


【解决方案1】:

如果我理解正确,您正在尝试获取 sum 数据框并将其转换为与 _df 相同的视图(顺便说一下,不要调用数据框 sum,因为它是最常见的 R 函数之一)。

你应该可以使用这个:

library(tidyverse)
sum %>% spread(key = 'cluster_id', value = 'count')

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多