如何将行的元素与列的元素进行匹配,并在rstudio

时间:2016-01-28 10:47:23

标签: r for-loop match rstudio

我想将数据框列表中的列名“Name”与数据帧“Volume”的Rowname相匹配,并对列执行calultion。

我可以为此目的使用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) 

我想读取List $ Name匹配中的第一个元素与相应的列,提取列并对其执行简单的添加并将结果存储在数据帧“Total”中。我希望单独为行中的所有元素做同样的事情。

List

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

Volume

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

我知道这可以在合并两个文件并使用sapply函数后完成。但由于我想在数据帧“List”上使用for循环,我只想比较两个数据帧,并在循环结束后每次将结果分别存储到另一个数据帧。因此合并文件无助于解决此问题。

实际的List数据帧由23条记录组成,实际的Volume数据帧由18000条记录组成。

我正在尝试构建一个函数,但我不确定这个计算需要for循环。是否有更好,更简单的方法来执行此任务?

2 个答案:

答案 0 :(得分: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]
    }

}

答案 1 :(得分:0)

我已经解决了使用代码

将行元素与列的元素匹配的问题
match(List$Name[i], names(Volume))