Значение ячейки строки на основе значения других столбцов - PullRequest
0 голосов
/ 06 августа 2020

У меня есть такой df:

df.temp = data.frame("t" = c(1,2,3,5,1,3,2,5), "a" = c("a1","a2","a1","a1","a1","a1","a1","a1"), "b" = 
c("b1","b1","b1","b1","b2","b2","b2","b2"))

> df.temp
  t  a  b
1 1 a1 b1
2 2 a2 b1
3 3 a1 b1
4 5 a1 b1
5 1 a1 b2
6 3 a1 b2
7 2 a1 b2
8 5 a1 b2

Теперь я хочу создать столбец для присвоения значения на основе значения строки в будущем, например

  t  a  b  d
1 1 a1 b1 1_2
2 2 a2 b1 2_3
3 3 a1 b1 3_5
4 5 a1 b1 NA
5 1 a1 b2 1_3
6 3 a1 b2 3_2
7 2 a1 b2 2_5
8 5 a1 b2 NA

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Базовый вариант R с использованием ave

within(df.temp, d <- ave(t,b,FUN = function(x) c(paste(x[-length(x)],x[-1],sep = "_"),NA)))

, такой, что

  t  a  b    d
1 1 a1 b1  1_2
2 2 a2 b1  2_3
3 3 a1 b1  3_5
4 5 a1 b1 <NA>
5 1 a1 b2  1_3
6 3 a1 b2  3_2
7 2 a1 b2  2_5
8 5 a1 b2 <NA>
2 голосов
/ 06 августа 2020

Мы можем сгруппировать по 'b' и paste по 't' с lead из 't'

library(dplyr)
library(stringr)
df.temp %>% 
      group_by(b) %>% 
      mutate(d = str_c(t, lead(t), sep="_"))
# A tibble: 8 x 4
# Groups:   b [2]
#      t a     b     d    
#  <dbl> <chr> <chr> <chr>
#1     1 a1    b1    1_2  
#2     2 a2    b1    2_3  
#3     3 a1    b1    3_5  
#4     5 a1    b1    <NA> 
#5     1 a1    b2    1_3  
#6     3 a1    b2    3_2  
#7     2 a1    b2    2_5  
#8     5 a1    b2    <NA> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...