r - 基于一个共享因素投射/传播 2 列
问题描述
我正在为此苦苦挣扎-抱歉。这是我的财产:
library(dplyr)
library(reshape2)
haves <- data.frame(
id = c(1, 1, 1, 1, 1)
, factor1 = c("f1", "f1", "f1", "f1", "f1")
, factor2 = c("f2", "f2", "f2", "f2", "f2")
, number_1 = c(1,2,3,10,11)
, number_2 = c(43,44,45,52,53)
, age = c(2, 2, 2, 9, 9)
, date1 = c(as.Date("2014-07-01"), as.Date("2014-07-01"), as.Date("2014-07-01"), as.Date("2015-02-01"), as.Date("2015-02-01"))
, y = c(554.5, 554.5, 554.5, 616, 616)
, x = c(2,1,0,3,0)
)
haves
id factor1 factor2 number_1 number_2 age date1 y x
1 1 f1 f2 1 43 2 2014-07-01 554.5 2
2 1 f1 f2 2 44 2 2014-07-01 554.5 1
3 1 f1 f2 3 45 2 2014-07-01 616.0 0
4 1 f1 f2 10 52 9 2015-02-01 616.0 3
5 1 f1 f2 11 53 9 2015-02-01 616.0 0
我想根据 x 投射/传播 number_1 和 number_2 中的值来得到这个:
解决方案
我猜你正在寻找pivot_wider
解决方案:
library(tidyr)
haves %>%
pivot_wider(names_from = x, values_from = starts_with("number_"), values_fill = 0)
给你
# A tibble: 2 x 14
id factor1 factor2 age date1 y number_1_2 number_1_1 number_1_0 number_1_3 number_2_2 number_2_1 number_2_0
<dbl> <fct> <fct> <dbl> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 f1 f2 2 2014-07-01 554. 1 2 3 0 43 44 45
2 1 f1 f2 9 2015-02-01 616 0 0 11 10 0 0 53
推荐阅读
- javascript - 点击事件不适用于识别我的 NFT 标记时出现的自定义实体
- google-cloud-firestore - Update、Set、Set 与 merge 的写入效率差异
- stocktwits - Stocktwits 上的 Trending score 的定义是什么
- python - 在有序字典列表中搜索列表
- javascript - React 应用程序可以在 Yandex 浏览器中运行吗?
- node.js - 重新加载页面后如何保存闪存消息并重置?
- c# - SQLConnection 不是 VS 2019 中 System.Data.SqlClient 的一部分?
- r - 如何根据帐户和周间隔计算金额的标准差?
- sql - 自引用表 SQL 从包含的元素中选择最后一个元素
- excel - VBA,如果文件名> 1,则附加 Pdfs