r - R / dyplr:将两行转换为两列
问题描述
我在 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)
我认为问题可能在于有些行不一定有单数和复数,但只有一个(例如“爵士乐”)。大多数行都有。
那么我怎样才能在 R 或 dplyr 中做到这一点?
解决方案
如果您首先查看前几列::
select(dat, Base, Word, Type)[1:2,]
# Base Word Type
# 1 shoe shoe singular
# 2 shoe shoes plural
从这里开始,考虑它只是将其扩展为单数/复数列,有效地从“高”到“宽”。(如果有两个以上的类别会更明显Type
。)
select(dat, Base, Word, Type) %>%
spread(Type, Word) %>%
rename(Word_Pl=plural, Word_Sg=singular)
# Base Word_Pl Word_Sg
# 1 jazz jazz <NA>
# 2 key keys key
# 3 shoe shoes shoe
# 4 toy toys toy
您也可以轻松地重复此Number
操作。从那里开始,只需根据键列合并/加入它们,Base
:
full_join(
select(dat, Base, Word, Type) %>%
spread(Type, Word) %>%
rename(Word_Pl=plural, Word_Sg=singular),
select(dat, Base, Number, Type) %>%
spread(Type, Number) %>%
rename(Num_Pl=plural, Num_Sg=singular),
by = "Base"
)
# Base Word_Pl Word_Sg Num_Pl Num_Sg
# 1 jazz jazz <NA> 58765 NA
# 2 key keys key 6546 39485
# 3 shoe shoes shoe 49955 4834
# 4 toy toys toy 23556 75465
消耗数据:
library(dplyr)
library(tidyr)
dat <- read.table(text='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', header=TRUE, stringsAsFactors=FALSE)
推荐阅读
- python - 如果唯一列表/csv中不存在行,则添加行的功能?
- excel - 使用工作表列表中的用户名和密码登录表单
- javascript - 从 ajax 结果创建对象数组
- python - 在 web 表中循环
- javascript - GSAP 脚本标签正常但不工作
- sql - 使用一个表并给出所有可能组合的输出的 Sql
- azure - Npm 以代码“1”退出 - 尝试在 azure devops 中运行 cypress 测试
- html - 下载 div 的内容(将 div 的外观保存为图像)
- ios - RxSwift 组合:监听 UIView 属性更新
- reactjs - React - Redux 错误:连接后元素类型无效