【问题标题】:Loop/cbind on column names (character)在列名(字符)上循环/cbind
【发布时间】:2013-08-06 13:43:19
【问题描述】:

我目前正在研究由 60 个时间序列组成的数据库。我实际上有两个数据集:每个都对应一个特定的变量(A 或 B)。 请在下面找到一个示例(即使我的真实数据库包含 60 个姓名和 51 年) 变量 A

year name1 name2 name3 
2002   39   56   31 
2003   37   31   52 
2004   51   58   51 
2005   70   59   68 
2006   41   43   37 
2007   43   31   53

变量 B:

year name1 name2 name3 
2002   56   18   24 
2003   72   52   59 
2004   32   30   33 
2005   33   34   51 
2006   47   46   19 
2007   19   32   25 

我想实现一个循环,为每个名称创建以下矩阵。

即:对于name1

year var1 var2 
2002   39   56 
2003   37   72 
2004   51   32 
2005   70   33 
2006   41   47 
2007   43   19

起初,我做了以下事情(因为我只对两个数据集中出现的系列感兴趣)

names=as.matrix(intersect(colnames(df.var_A),colnames(df.var_B))) 
DF.VAR_A=subset(df.var_A,select=noms) 
DF.VAR_B=subset(df.var_B,select=noms)

那我想获取每个名字对应的系列(A和B)

我知道岁月:

YEAR=DF.VAR_A[,"year"]

不出所料,我发现:

 DF.VAR_A[,"name1"] 
[1] 39 37 51 70 41 43

现在我想为每个名称创建一个数据框,由年份、变量 A 对应的值和变量 B 对应的值组成。

我从名称向量中去掉“YEAR”。

NAMES=names[-c(1)]

那我试过了:

DATA=NULL 
for (i in 1:length(NAMES)){ 
DATA[i]=cbind(YEAR,DF.VAR_A[,i],DF.VAR_B[,i]) 
}

但是会出现以下警告: 1:在 DATA[i] = cbind(Année, DF.VAR_A[, i], DF.VAR_B[, i]) 中: le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement

总而言之,我想获得 3 个不同的数据帧(每个名称 1 个),然后能够应用一个循环(我已经编程)。我想将循环“自动化”到每个系列。 我希望它很清楚......

有什么想法吗?

非常感谢。

【问题讨论】:

  • 嗨,欢迎来到 SO。由于您是新手,您可能需要阅读网站的aboutFAQ 部分,以帮助您充分利用它。如果某个答案确实解决了您的问题,您可能需要考虑投票和/或将其标记为已接受,以表明问题已得到回答,方法是勾选合适答案旁边的绿色小复选标记。您没有义务这样做,但它有助于保持网站没有未回答的问题,并奖励那些花时间解决您的问题的人。

标签: r loops for-loop character


【解决方案1】:

在我看来,你们只是 cbinding 在一起。这将非常简单,每个子集都将是它自己的列表元素(但如果您需要在程序上更健壮的东西,还有很多其他方法可以做到这一点):

lapply( 2:ncol(varA) , function(x) cbind( Year = varA[,1] , A = varA[ , x], B = varB[,x] ) )
[[1]]
     Year  A  B
[1,] 2002 39 56
[2,] 2003 37 72
[3,] 2004 51 32
[4,] 2005 70 33
[5,] 2006 41 47
[6,] 2007 43 19

[[2]]
     Year  A  B
[1,] 2002 56 18
[2,] 2003 31 52
[3,] 2004 58 30
[4,] 2005 59 34
[5,] 2006 43 46
[6,] 2007 31 32

[[3]]
     Year  A  B
[1,] 2002 31 24
[2,] 2003 52 59
[3,] 2004 51 33
[4,] 2005 68 51
[5,] 2006 37 19
[6,] 2007 53 25

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多