【发布时间】: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_ 的列名,如果两个条件都匹配,则复制从sum 到df_ 中发现条件为真的单元格的"count" 列中的相应值。最后,我想用sum 中count 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 %>% spread(cluster_id, count, fill = 0) -
@DavidKlotz 太棒了!!谢谢。它奏效了。
-
请注意,您可能希望给 tibble 起一个不同的名称,因为
sum是一个基本函数 -
是的,这是一个临时的。我会给一个更明智的名字。 :)
-
@DavidKlotz btw 在传播后我的列名没有排序。这就像 SOM1 SOM10 而不是 SOM1 SOM2 ...
标签: r dataframe data-science tidyverse tibble