runLabel()
當我針對開始資料框運行自定義函式時,我得到以下輸出,該函式myDF
是通過下面的代碼生成的。該代碼生成兩個資料框:Label
和selGrpCode
,并且Label
需要通過值進行操作,selGrpCode
從而導致matchOnes
向資料框添加(突變)新列Label
。但該matchOnes
列未出現在Label
資料框中。
> runLabel(myDF)
Element Group eleCnt eleGrpCnt grpPrefix subGrpRnk grpCode
1 R 0 1 0 0 0 0.0
2 R 0 2 0 0 0 0.0
3 B 0 1 0 0 0 0.0
4 R 0 3 0 0 0 0.0
5 X 1 1 1 1 1 1.1
6 X 1 2 1 2 2 2.2
grpCode
1 1.1
2 2.2
library(dplyr)
myDF <- data.frame(
Element = c("R","R","B","R","X","X"),
Group = c(0,0,0,0,1,1)
)
runLabel <- function(x) {Label <- x %>%
group_by(Element) %>%
mutate(eleCnt = row_number()) %>%
mutate(eleGrpCnt = ifelse(Group != 0,match(Group, unique(Group)),0)) %>%
ungroup() %>%
mutate(grpPrefix = eleCnt * eleGrpCnt) %>%
mutate(subGrpRnk = ifelse(Group > 0, sapply(1:n(), function(x) sum(Element[1:x]==Element[x] & Group[1:x] == Group[x])),0)) %>%
mutate(grpCode = as.numeric(paste(grpPrefix,subGrpRnk, sep = '.')))
selGrpCode <- Label %>% distinct(grpCode) %>% select(grpCode) %>% filter(grpCode > 0) %>% arrange(grpCode)
Label %>% mutate(matchOnes = ifelse(eleCnt < min(selGrpCode),eleCnt,0))
print.data.frame(Label)
print.data.frame(selGrpCode)
}
這就是Label
資料框應該呈現的方式(在右側添加缺失的列):
Element Group eleCnt eleGrpCnt grpPrefix subGrpRnk grpCode matchOnes
1 R 0 1 0 0 0 0.0 1
2 R 0 2 0 0 0 0.0 0
3 B 0 1 0 0 0 0.0 1
4 R 0 3 0 0 0 0.0 0
5 X 1 1 1 1 1 1.1 1
6 X 1 2 1 2 2 2.2 0
如何調整函式以便兩個資料框可以運行和互動?盡可能使用 dplyr。請不要將其簡化為一個資料幀,因為此代碼是對更多涉及代碼的簡化,需要運行兩個資料幀。
uj5u.com熱心網友回復:
您必須Label
在最后保存變數,否則不會從您的函式中列印突變:
runLabel <- function(x) {
...
Label <- Label %>% mutate(matchOnes = ifelse(eleCnt < min(selGrpCode),eleCnt,0))
...
}
這里是你的完整代碼:
library(dplyr)
myDF <- data.frame(
Element = c("R","R","B","R","X","X"),
Group = c(0,0,0,0,1,1)
)
runLabel <- function(x) {
Label <- x %>%
group_by(Element) %>%
mutate(eleCnt = row_number()) %>%
mutate(eleGrpCnt = ifelse(Group != 0,match(Group, unique(Group)),0)) %>%
ungroup() %>%
mutate(grpPrefix = eleCnt * eleGrpCnt) %>%
mutate(subGrpRnk = ifelse(Group > 0, sapply(1:n(), function(x) sum(Element[1:x]==Element[x] & Group[1:x] == Group[x])),0)) %>%
mutate(grpCode = as.numeric(paste(grpPrefix,subGrpRnk, sep = '.')))
selGrpCode <- Label %>% distinct(grpCode) %>% select(grpCode) %>% filter(grpCode > 0) %>% arrange(grpCode)
Label <- Label %>% mutate(matchOnes = ifelse(eleCnt < min(selGrpCode),eleCnt,0))
print.data.frame(Label)
print.data.frame(selGrpCode)
}
runLabel(myDF)
#> Element Group eleCnt eleGrpCnt grpPrefix subGrpRnk grpCode matchOnes
#> 1 R 0 1 0 0 0 0.0 1
#> 2 R 0 2 0 0 0 0.0 0
#> 3 B 0 1 0 0 0 0.0 1
#> 4 R 0 3 0 0 0 0.0 0
#> 5 X 1 1 1 1 1 1.1 1
#> 6 X 1 2 1 2 2 2.2 0
#> grpCode
#> 1 1.1
#> 2 2.2
使用reprex v2.0.2創建于 2022-09-12
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/506835.html
上一篇:在python中計算業務作業時間