【问题标题】:how to select rows from a dataframe1 in R where dataframe$1column is found somewhere in dataframe2$column如何从 R 中的 dataframe1 中选择行,其中 dataframe$1column 位于 dataframe2$column 的某处
【发布时间】:2011-04-07 17:10:17
【问题描述】:

我需要从 dataframe1 中的行创建一个新的 dataframe,这样 dataframe1$column 的值就是在 dataframe2$colum 中找到的值

数据框是:

y <- "name,number,lunch  
joe,2,peaches  
steve,5,hotdog  
jon,7,clamroll  
nick,11,sloppyJoe"


x <- "number,office  
1,1b  
2,1a  
3,2s  
4,4d  
5,f4  
6,f4  
7,h3  
8,g3  
9,j7  
10,d3 
11,jk"  

df1 <- read.csv(textConnection(df1), header=TRUE, sep=",", stringsAsFactors=FALSE)  
df2 <- read.csv(textConnection(df2), header=TRUE, sep=",", stringsAsFactors=FALSE)

我试过了:

df3 <- df1[which(df1$number == df2$number), ]

无济于事。 我如何在 R 中正确执行此操作?我可以编写一个 perl 脚本,但我有大约 100 个这样的集合,并且不想创建更多的临时文件。

【问题讨论】:

标签: r


【解决方案1】:

再次,%in% 技巧:

> df1[df1$number %in% df2$number,]
   number office
2       2     1a
5       5     f4
7       7     h3
11     11     jk

对于它的价值,如果您想合并它们,您可以轻松地进行合并。在这种情况下,我会说这是最干净的解决方案:为您提供出现员工的每个办公室,并匹配他们:

> merge(df1,df2)
  number office  name     lunch
1      2     1a   joe   peaches
2      5     f4 steve    hotdog
3      7     h3   jon  clamroll
4     11     jk  nick sloppyJoe

查看合并的帮助文件以获得更多选项,你可以用它做很多事情。

【讨论】:

    【解决方案2】:

    Joris 的回答很到位。 merge() 命令也可以用于这种类型的东西。如果您熟悉 SQL 联接,则可以将merge() 中的大多数选项与不同的联接操作相比较。

    #Inner join
    > merge(df1,df2)
      number office  name      lunch
    1      2   1a     joe  peaches  
    2      5   f4   steve   hotdog  
    3      7   h3     jon clamroll  
    4     11     jk  nick  sloppyJoe
    
    #Right join:
    > merge(df1,df2, all.x = TRUE)
       number office  name      lunch
    1       1   1b    <NA>       <NA>
    2       2   1a     joe  peaches  
    3       3   2s    <NA>       <NA>
    4       4   4d    <NA>       <NA>
    5       5   f4   steve   hotdog  
    6       6   f4    <NA>       <NA>
    7       7   h3     jon clamroll  
    8       8   g3    <NA>       <NA>
    9       9   j7    <NA>       <NA>
    10     10    d3   <NA>       <NA>
    11     11     jk  nick  sloppyJoe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2021-05-22
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多