Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据数字和字符条件将数据从一个数据库添加到另一个数据库_R_Conditional - Fatal编程技术网

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
我用数据外观的示例编辑了这个问题。