【问题标题】:Which Merge do I need?我需要哪个合并?
【发布时间】:2011-10-02 02:50:47
【问题描述】:

我发现合并是一个困难的概念(inner,outer,right,left...)所以请原谅这个简单的问题。
我想将生成的每一列合并到之前的列。

labelA <- array(letters[1:10], dim=c(10,1))

## Function: test_values ##
test_func = function(df, nameA, nameB) {
test_values <- array(data=1, dim=c(10,1))
for (i in 1:10){
   test_values[i] <- paste(nameA, nameB, i, sep="_")
   }
merge (x=df, y=test_values, sort=FALSE, all=TRUE) # ??
}

# Comparison #1
nameA <-"A"
nameB <-"B"
gran_total = test_func(labelA, nameA, nameB)

# Comparison #2
nameA <-"C"
nameB <-"D"
gran_total = test_func(gran_total, nameA, nameB)

但我的输出是 30 行 x 1 列的矩阵

但是我想要(不知道如何返回)10 行 3 列的矩阵

V1 V2     V3  
a  A_B_1  C_D_1  
b  A_B_2  C_D_2  
c  A_B_3  C_D_3  
d  A_B_4  C_D_4  
e  A_B_5  C_D_5
...

【问题讨论】:

    标签: r merge


    【解决方案1】:

    您可能需要cbinddata.frame 而不是merge

    这是一个例子:

    > labelA <- array(letters[1:3], dim=c(3,1))
    
    > # simple way
    > data.frame(labelA, paste("A", "B", 1:3, sep = "_"), paste("C", "D", 1:3, sep = "_"))
      labelA paste..A....B...1.3..sep...._.. paste..C....D...1.3..sep...._..
    1      a                           A_B_1                           C_D_1
    2      b                           A_B_2                           C_D_2
    3      c                           A_B_3                           C_D_3
    
    > # generalize as a function
    > f <- function(df, nA, nB) paste(nA, nB, 1:nrow(df), sep = "_")
    > data.frame(labelA, f(labelA, "A", "B"), f(labelA, "C", "D"))
      labelA f.labelA...A....B.. f.labelA...C....D..
    1      a               A_B_1               C_D_1
    2      b               A_B_2               C_D_2
    3      c               A_B_3               C_D_3
    
    > # more generalize for flexible arguments
    > f2 <- function(df, labels)
    +   data.frame(df, do.call("cbind", llply(labels, 
    +     function(x) do.call("paste", c(as.list(x), list(1:nrow(df)), sep = "_")))))
    
    > f2(labelA, list(c("A", "B"), c("C", "D")))
      df    X1    X2
    1  a A_B_1 C_D_1
    2  b A_B_2 C_D_2
    3  c A_B_3 C_D_3
    
    > f2(labelA, list(c("A", "B"), c("C", "D"), c("E", "F", "G")))
      df    X1    X2      X3
    1  a A_B_1 C_D_1 E_F_G_1
    2  b A_B_2 C_D_2 E_F_G_2
    3  c A_B_3 C_D_3 E_F_G_3
    

    【讨论】:

    • 我发现 data.frame 效果最好。我应该想到...我尝试了 cbind 但无法使其正常工作。干杯,K
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多