匹配一个数据框中的行与一秒钟中的列

时间:2012-07-11 03:57:46

标签: r memory add

示例数据:

t1 <- data.frame(
  CName=c("334","5as4","ggg","bbb"), 
  D1=c(1," ",3,1), 
  D2=c(3,4,5,5)
)

t2 <- data.frame(
  PName=c("zz","yy","xx","ww"), 
  `334`=c(5,6,3,5), 
  "ggg"=c(7,5,4,3), 
  `5as4`=c(9,9,1,1),
  check.names=FALSE
)

产:

t1
  CName D1 D2
1   334  1  3
2  5as4     4
3   ggg  3  5
4   bbb  1  5

t2
  PName 334 ggg 5as4
1    zz   5   7    9
2    yy   6   5    9
3    xx   3   4    1
4    ww   5   3    1

我希望将列t1$CName列与t2的列标题相匹配。

所需的输出是:

   PName  334  ggg  5as4
     D1   1    3     
     D2   3    5    4
1    zz   5    7    9
2    yy   6    5    9
3    xx   3    4    1
4    ww   5    3    1

1 个答案:

答案 0 :(得分:1)

在我看来,您确实希望将t1的转置与t2合并:

第1步:创建表t1的转置副本:

tt1 <- as.data.frame(t(t1[, -1]), stringsAsFactors=FALSE)
names(tt1) <- t1[, 1]
tt1$PName = rownames(tt1)

tt1
   334 5as4 ggg bbb PName
D1   1        3   1    D1
D2   3    4   5   5    D2

第2步:合并

merge(tt1, t2, all=TRUE, sort=FALSE)

  334 5as4 ggg PName  bbb
1   1        3    D1    1
2   3    4   5    D2    5
3   5    9   7    zz <NA>
4   6    9   5    yy <NA>
5   3    1   4    xx <NA>
6   5    1   3    ww <NA>

第3步:现在,您只需删除不需要的列。

  334 5as4 ggg PName
1   1        3    D1
2   3    4   5    D2
3   5    9   7    zz
4   6    9   5    yy
5   3    1   4    xx
6   5    1   3    ww

即使您声明的数据大小为1000个条目,这对R来说也不是问题。