【发布时间】:2018-04-27 08:18:49
【问题描述】:
我在 R 中有一个如下所示的数据框:
Word Base Number Type
- - - -
shoe shoe 4834 singular
shoes shoe 49955 plural
toy toy 75465 singular
toys toy 23556 plural
key key 39485 singular
keys key 6546 plural
jazz jazz 58765 plural
我想改造它,使它看起来像这样:
Word_Sg Word_Pl Base Num_Singular Num_Plural
-- -- -- -- --
shoe shoes shoe 4834 49955
toy toys toy 75465 23556
key keys key 39485 6546
NA jazz jazz NA 58765
因此,我不想为单数和复数的值设置两行,而是希望有两个列,一个带有单数的数字,一个带有复数的数字。
我使用dplyr::summarize 尝试了一些事情,但到目前为止,没有任何成功。这是我到目前为止提出的代码:
dataframe1 <- dataframe %>%
mutate(Num_Singular = case_when(Type == "singular" ~ Number)) %>%
mutate(Num_Plural = case_when(Type == "plural" ~ Number)) %>%
dplyr::select(Word, Base, Num_Singular, Num_Plural) %>%
group_by(Base) %>%
dplyr::summarize(Num_Singular = paste(na.omit(Num_Singular)),
Num_Plural = paste(na.omit(Num_Plural))
但是,它给了我这个错误:
Error in summarise_impl(.data, dots) :
Column `Num_Singular` must be length 1 (a summary value), not 2)
我认为问题可能在于有些行不一定有单数和复数,但只有一个(例如“jazz”)。大多数行都有。
那么我如何在 R 或 dplyr 中做到这一点?
【问题讨论】:
-
@akraf 也许,尽管该解决方案(
gather,unite,spread)依赖于具有相似类的列;在本例中,这样做会在收集时将数字转换为character。
标签: r dataframe dplyr tidyr tidyverse