[英]Take values from one column to new column if conditions met in R
我有一個如下所示的數據框(df),下面的列
“由我解決”列的索引值為“ TRUE / FALSE”。 它說票是否由我解決。
row Tkt.number Group solved.by.me
1 Tkt478111 Group A FALSE
2 Tkt478111 Group B FALSE
3 Tkt478111 Group C FALSE
4 Tkt478111 Group A FALSE
5 Tkt478111 Group A FALSE
6 Tkt478111 Group X FALSE
7 Tkt478111 Group A FALSE
8 Tkt478111 Group X FALSE
9 Tkt478145 Group A TRUE
10 Tkt478145 Group A TRUE
11 Tkt478145 Group B TRUE
12 Tkt478145 Group B TRUE
13 Tkt478145 Group B TRUE
我想檢查以下情況,並將結果存儲在新列Moved.out.from中
條件:
row Tkt Group solved.by.me Moved.out.from 1 Tkt478111 Group A FALSE 2 Tkt478111 Group B FALSE 3 Tkt478111 Group C FALSE 4 Tkt478111 Group A FALSE 5 Tkt478111 Group A FALSE 6 Tkt478111 Group X FALSE 7 Tkt478111 Group A FALSE Group A 8 Tkt478111 Group X FALSE 9 Tkt478145 Group A TRUE 10 Tkt478145 Group A TRUE 11 Tkt478145 Group B TRUE 12 Tkt478145 Group B TRUE 13 Tkt478145 Group B TRUE
請注意第7行,其中“ Tkt478111”正在從組A中移出(在我們的預定義列表中可用)並且沒有返回,但是在第5行中則不正確,因為它從組A中移出並再次返回。 (組X在預定義的組列表中不可用)
我是R的新手,不知道如何處理。 任何想法如何執行此操作? 在此先感謝您的幫助 !
我確定有人會用簡單的dplyr
/ data.table
方法解決該問題,但是與此同時,這是使用base
R的一種方法:
df <- read.table(text='row Tkt Group solved.by.me
1 Tkt478111 A FALSE
2 Tkt478111 B FALSE
3 Tkt478111 C FALSE
4 Tkt478111 A FALSE
5 Tkt478111 A FALSE
6 Tkt478111 X FALSE
7 Tkt478111 A FALSE
8 Tkt478111 X FALSE
9 Tkt478145 A TRUE
10 Tkt478145 A TRUE
11 Tkt478145 B TRUE
12 Tkt478145 B TRUE
13 Tkt478145 B TRUE', header=TRUE, stringsAsFactors=FALSE)
grps <- c('A', 'B', 'C', 'D')
newdf <- do.call(rbind,
lapply(split(df, df$Tkt), function(x) {
i <- which(x$Group %in% grps & !x$solved.by.me)
x$moved.from <- NA
if (length(i) > 0 && tail(i, 1) != nrow(x)) {
x$moved.from[tail(i, 1)] <- x$Group[tail(i, 1)]
}
x
}))
row.names(newdf) <- NULL
newdf
# row Tkt Group solved.by.me moved.from
# 1 1 Tkt478111 A FALSE <NA>
# 2 2 Tkt478111 B FALSE <NA>
# 3 3 Tkt478111 C FALSE <NA>
# 4 4 Tkt478111 A FALSE <NA>
# 5 5 Tkt478111 A FALSE <NA>
# 6 6 Tkt478111 X FALSE <NA>
# 7 7 Tkt478111 A FALSE A
# 8 8 Tkt478111 X FALSE <NA>
# 9 9 Tkt478145 A TRUE <NA>
# 10 10 Tkt478145 A TRUE <NA>
# 11 11 Tkt478145 B TRUE <NA>
# 12 12 Tkt478145 B TRUE <NA>
# 13 13 Tkt478145 B TRUE <NA>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.