【问题标题】:Match row names and column names to values in another data frame将行名和列名与另一个数据框中的值匹配
【发布时间】:2017-01-31 06:57:11
【问题描述】:

我有两个数据框如下:

df1 <- t(data.frame(seq(1,6,by=1),seq(6,1,by=-1)))    
colnames(df1) <- c("A","B","C","D","E","F)    
rownames(df1) <- c("a","b")    
df2 <- data.frame(rep(colnames(df1),2),rep(rownames(df1),6))    
colnames(df2) <- c("Vector1","Vector2")

这样

df1

     A   B   C   D   E   F
  a  1   2   3   4   5   6
  b  6   5   4   3   2   1

df2

   Vector1    Vector2
     A           a
     B           b
     C           a
     D           b
     E           a
     F           b
     A           a
     B           b
     C           a
     D           b
     E           a
     F           b

我想将df2的列值匹配到df1的列名和行名,并将对应的值填充到df2中的一个新列,如下:

 Vector1 Vector2   Newcol
   A       a         1
   B       b         5
   C       a         3
   D       b         3
   E       a         5
   F       b         1
   A       a         1
   B       b         5
   C       a         3
   D       b         3
   E       a         5
   F       b         1

任何建议将不胜感激。谢谢。

【问题讨论】:

标签: r


【解决方案1】:

我们可以使用mergemeltmelt 返回一个三列 data.framemerge 它与第二个数据集一起创建新列

library(reshape2)
merge(df2, melt(df1), by.x = c("Vector1", "Vector2"), by.y = c("Var2", "Var1"))

或者base R 选项是在pasteing 'df2' 行(do.call(paste)之后获取带有match 的数字索引,并获取'df1 的pasted 列名和行名' 使用outer。使用数字索引,我们获取 'df1' 中的值来创建 'Newcol'

df2$Newcol <- df1[match(do.call(paste, df2), 
                       t(outer(colnames(df1), rownames(df1), FUN = paste)))]
df2$Newcol
#[1] 1 5 3 3 5 1 1 5 3 3 5 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2018-06-06
    • 2021-04-27
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多