首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个变异()与pmap?

多个变异()与pmap?
EN

Stack Overflow用户
提问于 2018-01-12 03:04:53
回答 2查看 264关注 0票数 0

我有一个包含10个会话的数据集,每个会话都有两个团队成员的ID#s。我想将ID#s粘贴到一起,以形成团队ID。我可以通过10次变异(每个团队一次)来完成这一任务,但我试图找到一种方法,让地图或pmap中有一个变异。

一个只有两个会话的简单数据示例是

代码语言:javascript
复制
df2 <- data.frame( subj = c(1001,1002),
               id1.s1 = c(21, 44), 
               id2.s1 = c(21, 55), 
               id1.s2 = c(23, 44), 
               id2.s2 = c(21, 77))

df2 <- df2 %>%
  mutate(team.s1=paste(id1.s1, id2.s1, sep="-")) %>%
  mutate(team.s2=paste(id1.s2, id2.s2, sep="-")) %>%
  select(grep("subj|team", names(.)))

这给了我们

代码语言:javascript
复制
  subj team.s1 team.s2
1 1001   21-21   23-21
2 1002   44-55   44-77

是否有一种方法可以使用e1 =10个团队名称、e2 =10个ID#1、e3 =10个ID#2创建一个3元素列表,并在pmap内部使用mutate?或者其他能避免10个变异线的东西?

我想不出如何使数据帧名发生变异。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-12 03:35:19

一种基于提尔gather函数和spread函数的解决方案。separate函数是根据模式将一列分开。

代码语言:javascript
复制
library(dplyr)
library(tidyr)

df2 <- df1 %>%
  gather(ID_S, Value, -subj) %>%
  separate(ID_S, into = c("ID", "S")) %>%
  group_by(subj, S) %>%
  summarise(Value = paste(Value, collapse = "-")) %>%
  mutate(S = paste0("team.", S)) %>%
  spread(S, Value) %>%
  ungroup()
df2
# # A tibble: 2 x 3
# subj team.s1 team.s2
# * <dbl> <chr>   <chr>  
# 1  1001 21-21   23-21  
# 2  1002 44-55   44-77

数据

代码语言:javascript
复制
df1 <- data.frame( subj = c(1001,1002),
                   id1.s1 = c(21, 44), 
                   id2.s1 = c(21, 55), 
                   id1.s2 = c(23, 44), 
                   id2.s2 = c(21, 77))
票数 3
EN

Stack Overflow用户

发布于 2018-01-12 03:32:53

一个选项可以是基于列名后缀(即split或会话)的数据帧,然后为每个会话粘贴带有do.call(paste, ...)的列。

使用tidyverse (版本1.2.1):

代码语言:javascript
复制
df2 %>% 
    split.default(sub('id[12]\\.(s[0-9]+)', '\\1', names(.))) %>% 
    map_dfc(~do.call(paste, c(sep="-", .)))

# A tibble: 2 x 3
#  s1    s2    subj 
#  <chr> <chr> <chr>
#1 21-21 23-21 1001 
#2 44-55 44-77 1002 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48218980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档