【发布时间】:2015-10-15 03:00:42
【问题描述】:
我有两个数据框
数据框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 部分可能有问题,请问我应该如何修改代码?
谢谢!
【问题讨论】:
-
请使用
dput。在您的问题中,添加dput(a)和dput(b)的输出。 -
在这种情况下使用
%in%而不是== -
谢谢。效果很好。既然
%in%和==都会返回一个逻辑值向量,我可以知道为什么%in%在这种情况下效果很好,而==不行吗? -
使用
i = 1,查看i == 1:2和i %in% 1:2的输出。前者产生 2 逻辑,因为您要询问i是否等于 1 和 2。后者产生 1 逻辑,因为它会询问i是否等于 1 或 2。
标签: r for-loop data-manipulation