簡體   English   中英

基於其他列值的行單元格值

[英]Row cell value based on other columns value

我有一個這樣的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

我們可以按'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> 

使用ave的基本 R 選項

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM