r - 分组然后根据内容改变新列
问题描述
我试图找出一种对数据进行分组的方法,然后根据分组行的内容创建一列。
df
待处理样品
df <- tibble::tribble(
~name, ~position, ~G,
"DJ LeMahieu", "1B", 40,
"DJ LeMahieu", "2B", 75,
"DJ LeMahieu", "3B", 52,
"Max Muncy", "1B", 65,
"Max Muncy", "2B", 70,
"Max Muncy", "3B", 35,
"Whit Merrifield", "2B", 82,
"Whit Merrifield", "OF", 61
)
然后,我希望在名称级别对这些内容进行分组。我想创建一个名为 extra_position 的新列。此列将是由“/”分隔的位置列中的内容的串联。下面的示例输出:
output_df <- tibble::tribble(
~name, ~extra_position,
"DJ LeMahieu", "1B/2B/3B",
"Max Muncy", "1B/2B/3B",
"Whit Merrifield", "2B/OF"
)
tidyverse
如果可能的话,我想留在里面。另外,我很想知道您是否还可以控制数据连接的顺序。例如,您能否将 DJ LeMahieu 的extra_position
内容显示为:"3B/2B/1B"
?
解决方案
我们可以按“名称”分组,paste
或者通过将元素设置为单个字符串( str_c
)“位置”列collapse
library(dplyr)
library(stringr)
df %>%
group_by(name) %>%
summarise(extra_position = str_c(position, collapse="/"))
如果我们需要rev
修改订单
df %>%
group_by(name) %>%
summarise(position = str_c(rev(position), collapse="/"))
或者,如果它基于价值观
df %>%
group_by(name) %>%
summarise(position = str_c(gtools::mixedsort(position,
decreasing = TRUE), collapse="/"))
或与data.table
library(data.table)
setDT(df)[, .(extra_position = paste(position, collapse="/")), .(name)]
中base R
,使用aggregate
aggregate(position ~ name, df, paste, collapse="/")
推荐阅读
- java - Spring Security 在控制器上返回 String 作为主体而不是 UserDetails
- php - 锄头在php中获取出生日期或日期出生表格字符串
- javascript - 除非您第二次重新加载站点,否则 ReactJS 组件不会加载
- sql - 如何根据某些条件在postgres中逐列获取最后一行
- ios - 如何将 anchorPoint of view 设置为 0.5 、 0.5 以获得屏幕中心的视图?(不是场景)
- android - Flutter:相当于 NSLocale (iOS) & Locale (Android)
- centos - How to set up an additional glibc compiler on centOS
- java - 检查作业是否已经在运行,跳过新的 cron 实例作业
- python - How can I write a function fmap that returns the same type of iterable that was inputted?
- python - 在 Windows 上使用 Python 通过 ssh 连接到 DB 时出错