根据其他数据帧的数据加入数据帧的行

时间:2017-06-30 21:15:20

标签: r dataframe row

我有一个像这样的数据框

> 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

和其他像这样

> print(comb)

  head_req_ID tail_req_ID
1         r03         r12
2         r11         r13

我必须加入梳状数据帧中的元素,例如,我们在第一行中有r03,r12,我知道如何在一行中,将会是这样的

data[3,] <- c("r03+r12", data$effort[3] + data$effort[12],data$satisfaction[3] + data$satisfaction[12])

我删除了第12行数据

data <- data[-12,]

我不知道怎样才能为梳理数据帧的所有行自动生成。

2 个答案:

答案 0 :(得分:1)

以下是使用dplyr的解决方案。 data2是最终输出。

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))

数据准备

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 :(得分:1)

使用data.table:

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)

结果:

#     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