首页 > 解决方案 > 需要从不同行收集值并组合成一行

问题描述

我是 R 的新手,到目前为止我一直做得很好,但我现在需要做一些有点复杂的事情,而且不能让它工作。我有一个类似于以下的数据集(以后我将称之为 df):

df <- tribble(~name,             ~word,             ~N,
              "brandon",         "hello",            3,
               "john",           "test",             5,
               "jim",            "hello",            2,
               "brandon",        "goodbye",          2,
               "brandon",        "test",             1,
               "jim",            "goodbye",          4)

到目前为止,我有这样的事情发生:

temp_df <- df %>% mutate(
                     "hello" = ifelse(word == "hello", N, 0),
                     "goodbye" = ifelse(word == "goodbye", N, 0),
                     "test" = ifelse(word == "test", N, 0)
                  )

它正在创造这样的东西:

name            hello           goodbye        test        word         N
brandon         3               0              0           hello        3
john            0               0              5           test         5
jim             2               0              0           hello        2
brandon         0               2              0           goodbye      2
brandon         0               0              1           test         1
jim             0               4              0           goodbye      4

但我需要 df 看起来像这样:

name            hello           goodbye        test
brandon         3               2              1
john            0               0              5
jim             2               4              0

在这里完成后,我知道如何选择()重要数据,但我只是不确定如何将每个名称的所有数据放入一行。请停下来:)

PS如果有人在这里有一个更好的标题的建议,将不胜感激

标签: rdplyr

解决方案


使用dplyr

df %>%
  pivot_wider(id_cols="name", names_from="word", values_from="N", values_fill=0)

产量

# A tibble: 3 x 4
  name    hello  test goodbye
  <chr>   <dbl> <dbl>   <dbl>
1 brandon     3     1       2
2 john        0     5       0
3 jim         2     0       4

推荐阅读