R 如何根据数字和字符条件将数据从一个数据库添加到另一个数据库
我试图根据另一个数据库R 如何根据数字和字符条件将数据从一个数据库添加到另一个数据库,r,conditional,R,Conditional,我试图根据另一个数据库df1中的信息,在数据库df2中添加一个额外的列。我在df2中有一列名为sequence\u annotation,如果该列有一个数值,那么我希望它在名为PoleX和AnX的列中复制字符信息。对于两个数据库来说都是常量的列/标识符称为CTsite,因此这就是我如何匹配应该添加PoleX或AnX中的哪些值 df2如下所示: CTsite sequence_annotation OCCAJ01 Lt OCCAJ01 20 OCCAJ04 Mt OCCAJ04 40
df1
中的信息,在数据库df2
中添加一个额外的列。我在df2
中有一列名为sequence\u annotation
,如果该列有一个数值,那么我希望它在名为PoleX
和AnX
的列中复制字符信息。对于两个数据库来说都是常量的列/标识符称为CTsite
,因此这就是我如何匹配应该添加PoleX
或AnX
中的哪些值
df2如下所示:
CTsite sequence_annotation
OCCAJ01 Lt
OCCAJ01 20
OCCAJ04 Mt
OCCAJ04 40
CTsite AnX Pole X
OCCAJ01 720 2592
OCCAJ04 640 3264
df1如下所示:
CTsite sequence_annotation
OCCAJ01 Lt
OCCAJ01 20
OCCAJ04 Mt
OCCAJ04 40
CTsite AnX Pole X
OCCAJ01 720 2592
OCCAJ04 640 3264
所需的输出为:
CTsite sequence_annotation xres
OCCAJ01 Lt 720
OCCAJ01 20 2592
OCCAJ04 Mt 640
OCCAJ04 40 3264
我试图根据前面的问题和评论创建一个代码,但它不起作用。如果有人能帮忙,我将不胜感激。代码如下:
if (mode(df2$sequence_annotation)=="numeric") {
df2$xres <- df1$PoleX[match(df1$CTsite,df2$CTsite)]
} else {
df2$xres <- df1$AnX[match(df1$CTsite, df2$CTsite)]
}
if(模式(df2$sequence\u注释)=“数值”){
df2$xres使用tidyverse的不同解决方案。我怀疑您的数字测试不充分:该列的所有值必须共享相同的模式,可能与以下字符相同:
library(reader)
library(stringr)
df2 <- read_csv("
CTsite ,sequence_annotation
OCCAJ01 ,Lt
OCCAJ01 ,20
OCCAJ04 ,Mt
OCCAJ04 ,40",skip=1)
df1 <- read_csv("
CTsite ,AnX ,PoleX
OCCAJ01 ,720 ,2592
OCCAJ04 ,640 ,3264",skip=1)
df2 %>% inner_join(df1,by="CTsite") %>%
mutate(xres=ifelse(str_detect(sequence_annotation,"\\D"),AnX,PoleX))
## A tibble: 4 x 5
# CTsite sequence_annotation AnX PoleX a
# <chr> <chr> <int> <int> <int>
#1 OCCAJ01 Lt 720 2592 720
#2 OCCAJ01 20 720 2592 2592
#3 OCCAJ04 Mt 640 3264 640
#4 OCCAJ04 40 640 3264 3264
库(读卡器)
图书馆(stringr)
df2%
突变(xres=ifelse(str检测(序列注释“\\D”)、AnX、PoleX)
##一个tibble:4x5
#CTsite序列注释AnX PoleX a
#
#1 OCCAJ01 Lt 720 2592 720
#2 OCCAJ01 20 720 2592 2592
#3 OCCAJ04 Mt 640 3264 640
#4 OCCAJ04 40 640 3264 3264
dplyr软件包可能会有所帮助。但由于我无法重现这一点,我也帮不了什么忙。这是一份备忘单
欢迎来到StackOverflow!请阅读关于和如何给出答案的信息。这将使其他人更容易帮助你。嗨,Cath,谢谢你的链接。我对编码和阅读障碍一无所知,因此我发现很难解释我的问题。我不确定如何更好地解释,也许可以添加我的数据帧示例?数据示例(输入和期望的输出)将更容易查看您拥有的内容和想要的内容谢谢,是的,我以前尝试过这种方式,它确实添加了列xres
,但所有的值都是NA。可能是因为测试模式(…)==“数值”返回NA?很难说没有任何数据视图。我只是自己运行它,这是输出(mode(df2$sequence\u annotation)=“numeric”)
[1]TRUE
我用数据外观的示例编辑了这个问题。