r - 在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 标志
解决方案
outcome
也许您可以在获取宽格式数据之前创建变量的副本:
library(dplyr)
library(tidyr)
df %>%
mutate(outcome1 = outcome) %>%
pivot_wider(names_from = url_link, values_from = outcome1, values_fill = 0)
推荐阅读
- reactjs - 当用户在基于 NextJS 的网站上滚动时调整 #anchor (URL)
- java - 无法自动装配:在 IntelliJ 中找不到“MongoTemplate”类型
- c# - 如何将值传递给另一个程序集中的类的构造函数
- c++ - 编译器如何区分相同的函数参数名称和类成员名称?
- flutter - 在返回最后一个值的列表视图中调用 BlocBuilder
- c# - Moq dotnetfiddle 中的“覆盖方法的安全可访问性必须与被覆盖方法的安全可访问性相匹配”
- sql - 查找特定列的上一季度的非空数据
- oracle - ORACLE 使用过滤器和数据透视表的程序代码
- for-loop - 如何编写一个计算字符串中每个字符的函数?
- android - Android - AsyncTask 之后的 Intent 数据