[英]in R mutate rows with conditions
我有一個 dataframe,我需要改變一行。
這是 dataframe
structure(list(groups = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 4L, 4L, 4L, 4L, 1L, 1L, 3L, 3L, 3L, 3L,
2L, 2L, 2L, 2L, 2L), .Label = c("A", "B", "C", "F"), class = "factor"),
type = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 4L, 4L, 4L, 4L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 2L,
2L, 2L, 2L), .Label = c("Apple", "Bread", "curry", "Fish"
), class = "factor"), trip = c(NA, NA, NA, 1, 1, NA, NA,
NA, NA, 2, NA, NA, NA, NA, 3, 3, NA, NA, NA, NA, NA, 4, NA,
NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-28L))
如果組 A 中的值存在,我必須用“檢測到”的刺標記“行程”列。
組 A 被標記為已糾正,因為在組 A 中存在我的行程 (1)。
groups type trip trip_corrected
1 A Apple NA corrected
2 A Apple NA corrected
3 A Apple NA corrected
4 A Apple 1 corrected
5 A Apple 1 corrected
6 B Bread NA corrected
7 B Bread NA corrected
8 B Bread NA corrected
9 B Bread NA corrected
10 B Bread 2 corrected
11 B Bread NA corrected
12 A Apple NA
13 A Apple NA
14 F Fish NA corrected
15 F Fish 3 corrected
16 F Fish 3 corrected
17 F Fish NA corrected
18 A Apple NA
19 A Apple NA
20 C curry NA corrected
21 C curry NA corrected
22 C curry 4 corrected
23 C curry NA corrected
24 B Bread NA
25 B Bread NA
26 B Bread NA
27 B Bread NA
28 B Bread NA
謝謝你的幫助
您可以使用rleid
創建組,並為具有至少一個非 NA 值的組分配'corrected'
。
library(data.table)
setDT(df)[, trip_corrected := if(any(!is.na(trip))) 'corrected' else '',
rleid(groups, type)]
df
# groups type trip trip_corrected
# 1: A Apple NA corrected
# 2: A Apple NA corrected
# 3: A Apple NA corrected
# 4: A Apple 1 corrected
# 5: A Apple 1 corrected
# 6: B Bread NA corrected
# 7: B Bread NA corrected
# 8: B Bread NA corrected
# 9: B Bread NA corrected
#10: B Bread 2 corrected
#11: B Bread NA corrected
#12: A Apple NA
#13: A Apple NA
#14: F Fish NA corrected
#15: F Fish 3 corrected
#16: F Fish 3 corrected
#17: F Fish NA corrected
#18: A Apple NA
#19: A Apple NA
#20: C curry NA corrected
#21: C curry NA corrected
#22: C curry 4 corrected
#23: C curry NA corrected
#24: B Bread NA
#25: B Bread NA
#26: B Bread NA
#27: B Bread NA
#28: B Bread NA
# groups type trip trip_corrected
您也可以在dplyr
中使用它:
library(dplyr)
df %>%
group_by(grp = rleid(groups, type)) %>%
mutate(trip_corrected = if(any(!is.na(trip))) 'corrected' else '') %>%
ungroup
我們可以使用base R
df$trip_corrected <- with(df, ave(trip, with(rle(paste(groups, type)),
rep(seq_along(values), lengths)),
FUN = function(x) if(any(!is.na(x))) 'corrected' else ''))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.