R 在另一个数据框中搜索一列名称,并将来自其他列的数据合并在一起得到结果

R 在另一个数据框中搜索一列名称,并将来自其他列的数据合并在一起得到结果,r,dataframe,left-join,R,Dataframe,Left Join,我想创建一个基于两个数据帧的数据帧 第一种是期刊名称及其各自的影响因素。 第二个数据框包含我要搜索的期刊的名称 df1: df2: 我想要另一个df df3,其中df2中的日志在df1中搜索,如果匹配,请给我类似的内容,不带NA: 在一个地方,我希望日志影响因子对应于df2中的日志 df3 我开始使用R几个月,我不知道如何开始解决这个问题 两个数据帧在链接中更新: 一种解决方案是与dplyr一起使用join: 要使此工作正常,需要注意以下几点: 在df1中读取标题似乎占用了2行,因此跳过了第一行

我想创建一个基于两个数据帧的数据帧

第一种是期刊名称及其各自的影响因素。 第二个数据框包含我要搜索的期刊的名称

df1:

df2:

我想要另一个df df3,其中df2中的日志在df1中搜索,如果匹配,请给我类似的内容,不带NA:

在一个地方,我希望日志影响因子对应于df2中的日志

df3

我开始使用R几个月,我不知道如何开始解决这个问题

两个数据帧在链接中更新:

一种解决方案是与dplyr一起使用join:

要使此工作正常,需要注意以下几点:

在df1中读取标题似乎占用了2行,因此跳过了第一行,因为这与前面的示例更接近 read.table includes stringsAsFactors=FALSE(如果不希望将其作为因子) 有些日记账名称是大写的,有些是小写的。连接是区分大小写的,因此包含toupper以使连接之前的所有内容都是大写的。作为替代方案,如果希望保留原始数据帧不变,可以将toupper嵌入到left_连接中
请告诉我这是否是您的想法。

df2是数据帧吗?还是仅仅是一个向量?您没有显示任何列名,这使它看起来像是一个向量。看看classdf2就知道了。嗨,Gregor,这真的是一个数据帧。我对问题进行了编辑。如果它们是字符,如果以stringsAsFactors=FALSE导入,或者使用as.character预先更正,则没有任何警告。@r2evans感谢您的注意-我无意中假设它们是因子…当问题没有可靠的样本数据时,很容易做到,也很常见。它几乎就在那里,。实际上,警告消息出现了。但当我改为字符时,会出现其他消息:UseMethodright_join中出错:无法将其应用于字符类警告消息:1:列完整日志标题/日志影响因子将不同级别的因子合并,强制到字符向量2:因子日志影响因子包含隐式NA,考虑使用福克斯猫:
Full Journal Title  Journal Impact Factor

CA-A CANCER JOURNAL FOR CLINICIANS  223.679
Nature Reviews Materials    74.449
NEW ENGLAND JOURNAL OF MEDICINE 70.670
LANCET  59.102
NATURE REVIEWS DRUG DISCOVERY   57.618
CHEMICAL REVIEWS    54.301
Nature Energy   54.000
NATURE REVIEWS CANCER   51.848
JAMA-JOURNAL OF THE AMERICAN MEDICAL ASSOCIATION    51.273
NATURE REVIEWS IMMUNOLOGY   44.019
NATURE REVIEWS GENETICS 43.704
NATURE REVIEWS MOLECULAR CELL BIOLOGY   43.351
NATURE  43.070
and continues...

str(df1)
data.frame':    12541 obs. of  2 variables:
 $ my.journal: Factor w/ 11879 levels "","2D Materials",..: 4155 1872 8866 8999 8033 8861 2143 8841 8856 5795 ...
 $ jcr       : Factor w/ 4732 levels "","0.000","0.006",..: 4731 2905 4614 4613 4337 4336 4335 4334 4333 4332 ...
     my.journal
1                           Bioscience journal
2            Summa phytopathologica (impresso)
3            Summa phytopathologica (impresso)
4            Summa phytopathologica (impresso)
5  Australian journal of crop science (online)
6            Summa phytopathologica (impresso)
7                       Summa phytopathologica
8      Pesquisa agropecuaria tropical (online)
9      Crop breeding and applied biotechnology
10             Genetics and molecular research
11                    Tropical plant pathology
12             Genetics and molecular research
13     Perspectivas online: biológicas e saúde
14            Científica (jaboticabal. online)
15     Journal of plant physiology & pathology
16                    Tropical plant pathology
17           Summa phytopathologica (impresso)

> str(df2)
'data.frame':   17 obs. of  1 variable:
 $ my.journal: Factor w/ 11 levels "Australian journal of crop science (online)",..: 2 10 10 10 1 10 9 8 4 5 ...
journal                                     jcr   total
   <chr>                                       <fct> <int>
 1 Summa phytopathologica (impresso)           NA        5
 2 Genetics and molecular research             NA        2
 3 Tropical plant pathology                    NA        2
 4 Australian journal of crop science (online) NA        1
 5 Bioscience journal                          NA        1
 6 Científica (jaboticabal. online)            NA        1
 7 Crop breeding and applied biotechnology     NA        1
 8 Journal of plant physiology & pathology     NA        1
 9 Perspectivas online: biológicas e saúde     NA        1
10 Pesquisa agropecuaria tropical (online)     NA        1
11 Summa phytopathologica                      NA        1
library(dplyr)

df1 <- read.table("df1.txt", skip = 1, header = TRUE, stringsAsFactors = FALSE)
df2 <- read.table("df2.txt", header = TRUE, stringsAsFactors = FALSE)

df1 <- df1 %>%
  mutate(Full.Journal.Title = toupper(Full.Journal.Title))

df2 <- df2 %>%
  mutate(my.journal = toupper(my.journal))

df2 %>%
  left_join(df1, by = c("my.journal" = "Full.Journal.Title")) %>%
  group_by(my.journal, Journal.Impact.Factor) %>%
  summarize(total = n()) %>%
  arrange(desc(total))

my.journal                                  Journal.Impact.Factor total
   <chr>                                       <chr>                 <int>
 1 SUMMA PHYTOPATHOLOGICA (IMPRESSO)           NA                        5
 2 GENETICS AND MOLECULAR RESEARCH             NA                        2
 3 TROPICAL PLANT PATHOLOGY                    1.254                     2
 4 AUSTRALIAN JOURNAL OF CROP SCIENCE (ONLINE) NA                        1
 5 BIOSCIENCE JOURNAL                          0.375                     1
 6 CIENTíFICA (JABOTICABAL. ONLINE)            NA                        1
 7 CROP BREEDING AND APPLIED BIOTECHNOLOGY     1.026                     1
 8 JOURNAL OF PLANT PHYSIOLOGY & PATHOLOGY     NA                        1
 9 PERSPECTIVAS ONLINE: BIOLóGICAS E SAúDE   NA                        1
10 PESQUISA AGROPECUARIA TROPICAL (ONLINE)     NA                        1
11 SUMMA PHYTOPATHOLOGICA                      NA                        1