如何引用另一个单元格的值作为for循环中的条件? (R)

时间:2016-02-09 16:46:15

标签: r for-loop dataframe

我想设置一个条件,如果数据帧中单元格的坐标是[i,j],其中j = i + 1,那么单元格的值应该等于1.例如,在dataframe(df)下面有5列4行:

params

它应该看起来像:

A 0 0 0 0
B 0 0 0 0
C 0 0 0 0 
D 0 0 0 0

我尝试了以下内容:

A 1 0 0 0
B 0 1 0 0
C 0 0 1 0 
D 0 0 0 1

此代码不会更改df中的任何内容。我认为它不起作用的原因是因为它引用了[i,j]中的实际值而不是它们在数据帧中的“坐标”?

然后我尝试了:

for(i in 1:nrow(df)){
for(j in 1:ncol(df)){
if(j==i+1){
df[i,j] == 1
}}}

得到这个:

  

警告讯息:   在if(j == i + 1){:   条件的长度> 1,只使用第一个元素

我将把解决方案扩展到更大的数据帧(214x215),所以我认为循环可能是最好的方法。任何有关我的代码中的错误的建议/意见或更好的方法,将非常感谢!如果有任何需要澄清,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

以下是两种不使用循环进行分配的方法。两者都使用逻辑索引并假设数据帧名为dat(这是首选,因为df是函数名称,F分布的密度函数):

dat[ cbind(1:4, 1+1:4) ] <- 1 # or use `nrow` and `length` as the second args to ":"
dat[ row(dat) == col(dat) -1] <- 1

数据框和矩阵都有一个colrow函数,可以返回索引&#34;到位&#34;:

> col(dat)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    1    2    3    4    5
[4,]    1    2    3    4    5
相关问题