for循环索引不能正常工作

时间:2015-10-15 03:00:43

标签: r for-loop data-manipulation

我有两个数据帧

数据框a

a   A   1   4   7
b   B   2   5   8
c   C   3   6   9

数据框b

a   A   10  13  16
b   B   11  14  17
c   C   12  15  18

我希望创建一个新的数据框c,它保留a的前两列,并添加第3列到第5列的相应数字元素。

我使用了以下代码:

c<-data.frame(matrix(NA, nrow=3, ncol=5))

 for (i in 1:5) {
     if (i==1:2) {c[,i] <- a[,i]}
     else        {c[,i] <- round((a[,i]+b[,i])/2,0)}
 }

write.xlsx(c, "c.xlsx")

但是,输出看起来像Excel中的以下内容

    X1  X2  X3  X4  X5
1   a   #N/A    11  17  23
2   b   #N/A    13  19  25
3   c   #N/A    15  21  27

我认为i==1:2部分可能存在问题,我是否应该知道如何修改代码?

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能有所帮助

a = read.table(header = F, stringsAsFactors = F,  text  = "a   A   1   4   7
b   B   2   5   8
c   C   3   6   9")


b = read.table(header = F, stringsAsFactors = F,  text  = "a   A   10  13  16
b   B   11  14  17
c   C   12  15  18")


# Using for loop:

c = data.frame(matrix(NA, nrow=3, ncol=5))
for (i in 1:5) {
  if (i %in% 1:2) {c[,i] <- a[,i]}
  else {c[,i] <- round((a[,i]+b[,i])/2,0)}
}



# Even without a loop: 

c = cbind(a[,1:2], round((a[,3:5] + b[,3:5]) / 2, 0))
print(c)
#   V1 V2 V3 V4 V5
# 1  a  A  6  8 12
# 2  b  B  6 10 12
# 3  c  C  8 10 14