2016-01-28 47 views
0

我想将数据框List中的列名“Name”与数据框“卷”的Rowname匹配并对列执行计算。如何匹配行中的元素与列中的元素并在其中执行计算

我可以使用match或row.match来达到这个目的。

我试图做这样的事情

Total <- as.data.frame(matrix(0, ncol = 5, nrow = 5)) 
for (i in 1:5) 
{ 
    print(List$S.No[i] * 100) 
    for (j in 1:5) 
    { 
    if (match(List$Name, colnames(Volume)), 2])) 
    Value = Total + Volume[j] 
    print(Value) 
    } 
} 
print(Total) 

问题的代码:

Total <- as.data.frame(matrix(0, ncol = 5, nrow = 5)) 
for (i in 1:5) 
{ 
    print(List$S.No[i] * 100) 
    for (j in 1:5) 
    { 
    if (match(List$Name, colnames(Volume)), 2])) 
    # This match condition is not correct. I do not know how to call the column header 
    Value = Total + Volume[i] 
    # I want to add the data from the matching column to Total 
    print(Value) 
    } 
} 
print(Total) 

我要与相应的列读取列表$名称匹配的第一个元素,提取列并对其执行简单的添加并将结果存储在数据帧“Total”中。我希望对该行中的所有元素分别进行同样的操作。

List 
 

 
S.No \t Name 
 
2 \t Ba 
 
1 \t Ar 
 
5 \t Ca 
 
3 \t Bl 
 
4 \t Bu 
 

 
Volume 
 

 
Ar \t Ba \t Bl \t Bu \t Ca \t 
 
-5.1275 \t 1.3465 \t -1.544 \t -0.0877 \t 3.2955 \t 
 
-2.2385 \t 1.5065 \t 0.193 \t 1.082 \t 3.074 \t 
 
-5.3705 \t 1.1285 \t 1.966 \t 1.183 \t -1.9305 \t 
 
-6.4925 \t 1.5735 \t 1.36 \t -0.0761 \t 2.0875 \t 
 
-5.068 \t 0.9455 \t 0.947 \t -0.7775 \t 3.832 \t

我知道这是可以合并两个文件,并使用sapply功能后进行。但是因为我想在数据帧“List”上使用for循环,所以我只想比较两个数据帧,并在循环结束后每次将结果分别存储到另一个数据帧。所以合并这些文件并不能解决这个问题。

实际列表数据框由23条记录组成,实际卷数据框由18000条记录组成。

我想建立一个函数,但不知道作为for循环是必要的这种计算。有更好更简单的方法来执行此任务吗?

回答

0

我已经解决了使用的代码

match(List$Name[i], names(Volume)) 
一个行元素匹配,列的面临这个问题的问题
0

我不确定是否理解你的答案。 我认为你必须纠正这样的代码:

for (i in 1: length(List$Name)) { 
    for (j in 1:dim(Volume)[2]) { 
     if(List$Name[i]==colnames(Volume[j])) Total[,i]<-Total[,i]+Volume[,j] 
    } 

}

+0

代码有一些错误。错误if(List_Sample $ Name [i] == colnames(Volume [,j]))Total [,i] < - Total [,: 参数长度为零。我不确定错误的含义。 – RVRLibra

+0

对不起! if(List $ Name [i] == colnames(Volume [j]))。删除姓名(卷[,j])中的',') –

+0

即使这样也行不通。错误'[.data.frame'(Total,,i):未定义的列被选中,这是错误。我认为这是循环的问题。 – RVRLibra

相关问题