【问题标题】:Merge (or spread) two rows in a tibble or data.frame into one row将 tibble 或 data.frame 中的两行合并(或展开)为一行
【发布时间】:2018-06-13 09:28:18
【问题描述】:

我该如何完成重塑:

df_2row <- data.frame(ID = c("123", "123"), CURR = c("EUR", "USD"), 
                      OtherCOls = c("abc", "abc"), 
                      valueType1_EUR = c(100, NA), valueType2_CURR = c(NA, 110)) 

对此:

【问题讨论】:

  • 我想让我的数据“可展示”——这是一个报告的东西 完整的 data.frame 有更多的价值(欧元)列(即 4)和两个 CURR 列——我试图解决问题有点

标签: r dataframe reshape tidyverse


【解决方案1】:

类似下面的方法可以工作:

library(dplyr)

# create a separate subset data frame for each desired valueType/CURR combination
df.1 <- df_2row %>% select(ID, OtherCOls, valueType1_EUR, CURR) %>% na.omit()
df.2 <- df_2row %>% select(ID, OtherCOls, valueType2_CURR, CURR) %>% na.omit()

# join subsets together by ID & OtherCOls
df.combined <- left_join(df.1, df.2, by = c("ID", "OtherCOls"))

> df.combined
   ID OtherCOls valueType1_EUR CURR.x valueType2_CURR CURR.y
1 123       abc            100    EUR             110    USD

如果您确实需要 CURR 列采用相同的名称,您可以重命名它们,但我认为这可能会造成混淆。

【讨论】:

  • 谢谢 - 我无法在管道中的 na.omit() 周围抓住我的头。所以我在循环中用left_joins解决了它......是的,我在joinint之后进行了重命名。但我一直在寻找你给我的管道解决方案。谢谢......唯一有点乏味的是我有多达 15 个不同的 CURR......但我想我会设法以某种方式应用整个结构
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
相关资源
最近更新 更多