【问题标题】:How to reformat row values to column fields in R如何将行值重新格式化为 R 中的列字段
【发布时间】:2019-09-11 17:22:36
【问题描述】:

我有以 -# 结尾的行值(# 范围从 4 到 8)。我有一个对应的列,该列具有与每个 -# 行关联的值。

我想使用 dplyr 来转置我的 df,以便将 -3 行转换为列字段,并将来自其他变量(列)的相应值的数量添加到每一列,因为它是“标题”(-4,-5等)

我使用 dplyr 包将行移动到列标题,但似乎无法获得正确的输出。

head(MFP)
 PART_RMV_DT RMV_MFR_PART_NO RMV_LRU_TSO_TM RMV_LRU_TSR_TM LRU
1   2017-06-25        828300-5                               MFP
9   2016-01-11        828300-5          17500          17500 MFP
17  2015-12-27        828300-5          16698          12193 MFP
19  2018-11-30        828300-5          40738          17494 MFP
21  2016-09-19        828300-5          25107          13528 MFP
23  2016-11-17        828300-5          35281          35281 MFP

t <- as.data.frame.matrix(xtabs(RMV_LRU_TSO_TM~RMV_MFR_PART_NO, MFP_df))

Error in Summary.factor(c(4268L, 472L, 3342L, 17L, 1L, 1L, 2834L, 5421L,  : 
  ‘sum’ not meaningful for factors

如果我的列中有 4 组基于 -# 的不同值,我想将这些值移动到列中,并从每个 -# 列下方的其他列中提取相关值。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。是否期望拥有所有数字列?您确定您正确读取了数据吗?
  • 我包括了我的“MFP_df”的样子——希望这会有所帮助。本质上,我希望 col 'RMV_MFR_PART_NO' 中的值成为列,并且 col 'RMV_LRU_TSO_TM' 值低于每个对应的 -# col

标签: r dplyr reformatting


【解决方案1】:

虽然通过所提供的有限信息很难说出您实际追求的是什么(您所追求的示例以及准备运行的 tibble/tribble 将非常有帮助),下面的代码得到你听起来像你在追求什么。

但是,它在 R 中本质上是一个死胡同,因为 tibbles 的设置使得列名必须是唯一的(为什么我必须嵌套 RMV_LRU_TSO_TM 值)并且迭代列比迭代行要困难得多,所以你'将需要收集,unnest 之前,例如 group_by'ing 和总结。如果您告诉我们您的目标是将数据转换为您提到的格式后,您可能会得到更好的答案。

    tribble(
  ~PART_RMV_DT, ~RMV_MFR_PART_NO, ~RMV_LRU_TSO_TM, ~RMV_LRU_TSR_TM, ~LRU,
  # 2017-06-25,        828300-5,                               MFP
  "2016-01-11",        "828300-5",          17500,          17500, "MFP",
  "2015-12-27",        "828300-5",          16698,          12193, "MFP",
  "2018-11-30",        "828300-5",          40738,          17494, "MFP",
  "2016-09-19",        "828300-5",          25107,          13528, "MFP",
  "2016-11-17",        "828300-5",          35281,          35281, "MFP",
  "2019-09-11",        "828300-4",          77777,          88888, "MFP",
) %>% 
  select(RMV_MFR_PART_NO, RMV_LRU_TSO_TM) %>% 
  nest(-RMV_MFR_PART_NO) %>% 
  spread(key = RMV_MFR_PART_NO, value = data) %>%
  rename_at(vars(contains("-")), ~ str_remove(.,"828300"))

输出:

    # A tibble: 1 x 2
  `-4`              `-5`             
  <list>           <list>          
1 <tibble [1 × 1]> <tibble [5 × 1]>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2015-12-13
    相关资源
    最近更新 更多