[英]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.