首页 > 解决方案 > 在R中按变量扩展列但保留原始变量?

问题描述

我在 R 中有下表:

 id   | time_visited      | outcome | url_link
 -----|-------------------|---------|-------------------------
   1  |2012-01-01 00:00:00|  1      |google.com
   1  |2012-01-01 00:00:00|  1      |google.com/news
   1  |2012-01-01 00:00:00|  1      |google.com/news/cnn
   2  |2012-01-01 11:11:11|  0      |youtube.com
   2  |2012-01-01 11:11:11|  0      |youtube.com/search
   2  |2012-01-01 11:11:11|  0      |youtube.com/search/catvideos

我正在尝试使用来传播数据tidyr()::spread()以获得下表:

传播将在url_link变量上,它的值将由结果变量填充 - 但是我仍然希望保留结果变量以表示总体价值。

我试图得到的表看起来像这样:

 id   | time_visited      | outcome | google.com | google.com/news | google.com/news/cnn | youtube.com...
 -----|-------------------|---------|------------------------------|---------------------|--------------
   1  |2012-01-01 00:00:00|  1      | 1          |    1            |       1             |    0
   2  |2012-01-01 11:11:11|  0      | 0          |    0            |       0             |    1

我没有将所有列添加到最后,因为我没有间隔,但它应该是 youtube.com/search 和 youtube.com/search/catvideos 作为 2 个附加列

我尝试使用以下代码,但仍然没有结果:

df %>% spread(url_link, outcome, -c(time_visited, outcome), fill = outcome)

本质上是试图将变量 url_link 传播到新变量中,并让结果变量的值填充它——但也要在数据中保留结果变量。

注意:如果 id 与该 url_link 值相关联,我正在尝试创建一个 0/​​1 的标志,所以在 google.com 的情况下,它仅与 user_id == 1 相关,因此为 1 标志 - 用于 youtube因此它不是 0 标志

标签: rdplyrtidyr

解决方案


outcome也许您可以在获取宽格式数据之前创建变量的副本:

library(dplyr)
library(tidyr)

df %>%
  mutate(outcome1 = outcome) %>%
  pivot_wider(names_from = url_link, values_from = outcome1, values_fill = 0)

推荐阅读