简体   繁体   English

基于其他列值的行单元格值

[英]Row cell value based on other columns value

I have a df like this:我有一个这样的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

Now I want to create a column to assign value based on row value going forward, like this现在我想创建一个列来根据行值分配值,就像这样

  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

We can group by 'b' and paste the 't' with the lead of 't'我们可以按'b'分组并paste 't'和't'的lead

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> 

A base R option using ave使用ave的基本 R 选项

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

such that这样

  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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM