我想将数据框列表中的列名“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循环。是否有更好,更简单的方法来执行此任务?
答案 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))