如何解决通过比较r中不同数据帧中的多个列值来对新列进行突变
我有一个数据框DF,我想通过与数据框DF1列Col1,Col2,Col3,Col4,Col5,Col6进行比较在其中插入一个名为Stage的新列。下面是我的示例数据格式
Col1=c("ABCD","","wxyz","")
Col2=c("","MTNL","")
Col3=c("","PQRS","")
Col4=c("","")
Col5=c("","")
Col6=c("","EFGH")
DF=data.frame(Col1,Col2,Col3,Col4,Col5,Col6)
Style=c("ABCD","WXYZ","EFGH")
DF1=data.frame(Style)
Stage=c(1,1,3,6)
DFR=data.frame(Style,Stage)
DFR将是我得到的数据帧。 有人可以帮我解决这个问题吗?
解决方法
tidyverse方法:
library(tidyverse)
DFR <- DF %>%
mutate(across(everything(),~na_if(.,""))) %>%
pivot_longer(cols = everything(),names_to = "Stage",values_to = "Style",values_drop_na = T) %>%
filter(Style %in% c("ABCD","WXYZ","PQRS","EFGH"))%>%
mutate(Stage = as.integer(gsub("Col","",Stage)))
第一个mutate
调用将您的空白值替换为NA
。然后,我将您的表旋转为长格式,并删除NA
值,然后仅过滤您感兴趣的Style
值(可以将它们保存在向量中,以使代码更简洁,但是这里该列和您的向量被命名为相同的名称,因此我不想让人感到困惑)。第二个mutate
调用是可选的,它从每个Stage
值中删除“ Col”并将列转换为整数类型。
您可以将数据转换为长格式后再加入。
library(dplyr)
library(tidyr)
DF %>%
pivot_longer(cols = everything()) %>%
right_join(DF1,by = c('value' = 'Style'))
# name value
# <chr> <chr>
#1 Col1 ABCD
#2 Col3 PQRS
#3 Col6 EFGH
#4 NA WXYZ
,
我试图通过以下方式解决此问题,并且它正在起作用
DF <- DF %>%
mutate(across(everything(),"")))
DFR=DF1
DFR$Stage=ifelse(is.na(DF1$Style),NA,ifelse(DF1$Style %in% DF$Col1,1,ifelse(DF1$Style %in% DF$Col2,2,ifelse(DF1$Style %in% DF$Col3,3,ifelse(DF1$Style %in% DF$Col4,4,ifelse(DF1$Style %in% DF$Col5,5,ifelse(DF1$Style %in% DF$Col6,6,NA)))))))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。