【问题标题】:Gather four columns with values in two keys在两个键中收集具有值的四列
【发布时间】:2021-10-25 15:15:51
【问题描述】:

有人提出了类似的问题,但它们都是指在一个关键列中收集多个列。

我需要两个键中的多个列。

这是我拥有的数据框:

ID ... 测量_A.1 测量_A.2 测量_B.1 测量_B.2 1 8.25 23.5 4 5 2 8.6 22.5 3 4

如果我使用以下代码,我会得到:

 df %>% 
 gather(key = measure_A, value = "score_A", measure_A.1, measure_A.2) %>%
 gather(key = measure_B, value = "score_B", measure_B.1, measure_B.2)
ID ... measure_A score_A measure_B score_B 1 测量_A.1 8.25 测量_B.1 4 1 测量_A.1 8.25 测量_B.1 4 1 测量_A.2 23.5 测量_B.2 5 1 测量_A.2 23.5 测量_B.2 5 2 测量_A.1 8.6 测量_B.1 3 2 测量_A.1 8.6 测量_B.1 3 2 测量_A.2 22.5 测量_B.2 4 2 测量_A.2 22.5 测量_B.2 4

我想要的是这样的:

ID ... measure_A score_A measure_B score_B 1 测量_A.1 8.25 测量_B.1 4 1 测量_A.2 23.5 测量_B.2 5 2 测量_A.1 8.6 测量_B.1 3 2 测量_A.2 22.5 测量_B.2 4

在我看来,我必须减少一些东西,但我不知道如何结合收集命令来做到这一点。我找到了一个带有过滤器的解决方案,但我不明白它是如何工作的。

【问题讨论】:

标签: r tidyr gather


【解决方案1】:

这会以长格式提供所需的数据以及所有值。

library(tidyverse)

df %>%
  pivot_longer(cols = -ID, 
               names_to = c('.value', 'num'),
               names_sep = '\\.') 

#     ID num   measure_A measure_B
#  <int> <chr>     <dbl>     <int>
#1     1 1          8.25         4
#2     1 2         23.5          5
#3     2 1          8.6          3
#4     2 2         22.5          4

之后,我们需要进行一些操作来获得所需的确切输出。

df %>%
  pivot_longer(cols = -ID, 
               names_to = c('.value', 'num'),
               names_sep = '\\.') %>%
  rename_with(~sub('measure', 'score', .), starts_with('measure')) %>%
  mutate(measure_A = str_c('MeasureA', num, sep = '.'), 
         measure_B = str_c('MeasureB', num, sep = '.')) %>%
  select(-num)

#     ID score_A score_B measure_A  measure_B 
#  <int>   <dbl>   <int> <chr>      <chr>     
#1     1    8.25       4 MeasureA.1 MeasureB.1
#2     1   23.5        5 MeasureA.2 MeasureB.2
#3     2    8.6        3 MeasureA.1 MeasureB.1
#4     2   22.5        4 MeasureA.2 MeasureB.2

【讨论】:

  • 非常感谢!但是在第一步中有些事情并不完全奏效。变量 Num 已创建,但没有“填充”值 1 和 2。它保持为空。知道这可能是什么吗?
  • 如果您以可复制的格式提供您的数据以供使用,这将更容易提供帮助。
猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多