首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据其他数据帧的数据连接一个数据帧的行

根据其他数据帧的数据连接一个数据帧的行
EN

Stack Overflow用户
提问于 2017-07-01 05:15:20
回答 2查看 64关注 0票数 0

我有一个这样的数据帧

代码语言:javascript
复制
> print(data)

   req_ID effort satisfaction
1     r01      1           62
2     r02      4           55
3     r03      2           29
4     r04      3           41
5     r05      4           58
6     r06      7           63
7     r07     10           24
8     r08      2           56
9     r09      1           54
10    r10      3           49
11    r11      2           45
12    r12      5           49
13    r13      8           35
14    r14      2           50
15    r15      1           56
16    r16      4           27
17    r17     10           39
18    r18      4           35
19    r19      8           46
20    r20      4           20

和其他类似的东西

代码语言:javascript
复制
> print(comb)

  head_req_ID tail_req_ID
1         r03         r12
2         r11         r13

我必须连接梳状数据帧中的元素,例如,我们在第一行中有r03、r12,我知道如何可以在一行中,将如下所示

代码语言:javascript
复制
data[3,] <- c("r03+r12", data$effort[3] + data$effort[12],data$satisfaction[3] + data$satisfaction[12])

我擦除第12行数据

代码语言:javascript
复制
data <- data[-12,]

我不知道如何自动处理所有行的梳状数据帧。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-01 05:50:10

使用data.table:

代码语言:javascript
复制
dat <- fread("   req_ID effort satisfaction
                 r01      1           62
                 r02      4           55
                 r03      2           29
                 r04      3           41
                 r05      4           58
                 r06      7           63
                 r07     10           24
                 r08      2           56
                 r09      1           54
                 r10      3           49
                 r11      2           45
                 r12      5           49
                 r13      8           35
                 r14      2           50
                 r15      1           56
                 r16      4           27
                 r17     10           39
                 r18      4           35
                 r19      8           46
                 r20      4           20")

dat_comb <- fread("head_req_ID tail_req_ID
                   r03         r12
                   r11         r13")

weird_func <- function(x) {
  message(x)
  dat[req_ID == x[1]] <- list(paste0(c(x[1], x[2]), collapse = "+"), 
                              dat[req_ID == x[1], effort] + dat[req_ID == x[2], effort],
                              dat[req_ID == x[1], satisfaction] + dat[req_ID == x[2], satisfaction])
  dat <<- dat[!req_ID == x[2]]
}

apply(dat_comb, 1, weird_func)

结果如下:

代码语言:javascript
复制
#     req_ID effort satisfaction
#  1:     r01      1           62
#  2:     r02      4           55
#  3: r03+r12      7           78
#  4:     r04      3           41
#  5:     r05      4           58
#  6:     r06      7           63
#  7:     r07     10           24
#  8:     r08      2           56
#  9:     r09      1           54
# 10:     r10      3           49
# 11: r11+r13     10           80
# 12:     r14      2           50
# 13:     r15      1           56
# 14:     r16      4           27
# 15:     r17     10           39
# 16:     r18      4           35
# 17:     r19      8           46
# 18:     r20      4           20
票数 1
EN

Stack Overflow用户

发布于 2017-07-01 05:41:27

这是一个使用dplyr的解决方案。data2是最终输出。

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

data2 <- data %>%
  mutate(req_ID = ifelse(req_ID %in% comb[1, ], paste(comb[1, ], collapse = "+"),
                         ifelse(req_ID %in% comb[2, ], paste(comb[2, ], collapse = "+"),
                                req_ID))) %>%
  group_by(req_ID) %>%
  summarise(effort = sum(effort), satisfaction = sum(satisfaction))

数据准备

代码语言:javascript
复制
data <- read.table(text = "   req_ID effort satisfaction
1     r01      1           62
                   2     r02      4           55
                   3     r03      2           29
                   4     r04      3           41
                   5     r05      4           58
                   6     r06      7           63
                   7     r07     10           24
                   8     r08      2           56
                   9     r09      1           54
                   10    r10      3           49
                   11    r11      2           45
                   12    r12      5           49
                   13    r13      8           35
                   14    r14      2           50
                   15    r15      1           56
                   16    r16      4           27
                   17    r17     10           39
                   18    r18      4           35
                   19    r19      8           46
                   20    r20      4           20",
                   header = TRUE, stringsAsFactors = FALSE)

comb <- read.table(text = "head_req_ID tail_req_ID
1         r03         r12
                   2         r11         r13",
                   header = TRUE, stringsAsFactors = FALSE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44854921

复制
相关文章

相似问题

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