首页 > 解决方案 > 根据行号将列/行从一个数据帧映射到另一个数据帧

问题描述

我有两个数据框:

df1<-structure(list(Name = c("sub7", "sub7", "sub7", "sub7", "sub7", 
              "sub7", "sub7", "sub7", "sub7", "sub7"), StimulusName = c("Alpha1", 
               "Alpha1", "Alpha1", "Alpha1", "Alpha1", "Alpha1", "Alpha1", "Alpha1", 
                "Alpha1", "Alpha1"), PupilLeft = c(10.046, 10.05, 10.062, 10.072, 
                10.072, 10.056, 10.056, 10.056, 10.066, 10.066)), row.names = c(NA, 
                -10L), class = c("tbl_df", "tbl", "data.frame"))



    df2<-structure(list(Name = c("sub7", "sub7"), StimulusName = c("Alpha1", 
              "Alpha1"), Row_Num = c(1, 3), Label = c("Onset", "Offset")), row.names = c(NA, 
                -2L), vars = "Name", drop = TRUE, indices = list(0:1), group_sizes = 2L, biggest_group_size = 2L, labels = structure(list(
               Name = "Guilty Subject 07"), row.names = c(NA, -1L), class = "data.frame", vars = "Name", drop = TRUE), class = c("grouped_df", 
               "tbl_df", "tbl", "data.frame"))

我想从列Row_NumLabelin 中获取值,df2并将它们映射到与 indf1中的数字相对应的行Row_Num

我想在不使用循环的情况下实现这一点。也许只是使用这些Row_Num值作为索引?

此实例中的最终数据框如下所示:

     Name  StimulusName PupilLeft Row_Num Label 
 1   sub7  Alpha1            10.0       1 Onset 
 2   sub7  Alpha1            10.0      NA NA    
 3   sub7  Alpha1            10.1       3 Offset
 4   sub7  Alpha1            10.1      NA NA    
 5   sub7  Alpha1            10.1      NA NA    
 6   sub7  Alpha1            10.1      NA NA    
 7   sub7  Alpha1            10.1      NA NA    
 8   sub7  Alpha1            10.1      NA NA    
 9   sub7  Alpha1            10.1      NA NA    
10   sub7  Alpha1            10.1      NA NA  

标签: rindexingrows

解决方案


另一种选择是Row_Numdf1合并之前创建。

df_out <- merge(
      transform(df1, Row_Num = seq_len(nrow(df1))),
      df2,
      by = c("Name", "StimulusName", "Row_Num"),
      all.x = TRUE)
df_out$Row_Num <- ifelse(df_out$Row_Num %in% df2$Row_Num, df_out$Row_Num, NA)
df_out
#   Name StimulusName Row_Num PupilLeft  Label
#1  sub7       Alpha1       1    10.046  Onset
#2  sub7       Alpha1      NA    10.050   <NA>
#3  sub7       Alpha1       3    10.062 Offset
#4  sub7       Alpha1      NA    10.072   <NA>
#5  sub7       Alpha1      NA    10.072   <NA>
#6  sub7       Alpha1      NA    10.056   <NA>
#7  sub7       Alpha1      NA    10.056   <NA>
#8  sub7       Alpha1      NA    10.056   <NA>
#9  sub7       Alpha1      NA    10.066   <NA>
#10 sub7       Alpha1      NA    10.066   <NA>

推荐阅读