几个月前,我做了一个小循环以自动分配两个数据帧的列。基本上,df仅包含“深度”值,而df2包含“深度”和“年龄”值。因此,当“深度”值相等时,我可以将“年龄”值分配给df。
i = 1
k = 1
while (k < length(df2$Depth)) {
if (df2$Depth[k] == df$Depth[i]){
df$Age2[i] = df2$Age[k]
i = i + 1
}
k = k + 1
}
最近我需要再次使用此循环,但是我发现它不再起作用了,这不是因为循环而已...每当我想通过df$COLUNM[x] = df2$COLUNM[y]
分配colunm的值时,不起作用。为df$COLUNM[x]
分配的值而不是真实值df2$COLUNM[y]
是相对于其位置的行号。
只是不知道这是错误还是我做错了...直到几个月前才知道为什么它起作用,而现在却没有。
答案 0 :(得分:4)
发生这种情况的一种方法(也是我能想到的唯一方法)是您无意间创建了一个看起来像是数字的因子变量,然后将值分配给“真”数字。参见以下示例:
X <- rnorm(10)
y=factor(1:10)
y=factor(101:110)
X[4] <- y[5]
X
[1] -0.2093544 -1.8858439 -0.1048452 5.0000000 -1.1665309
[6] -2.1416764 1.6572388 -0.7806782 1.0002025 0.6032613
请注意,y [5]的“值”未被X“接受”,而是分配了其在因子水平中的相对位置。因此,您应该检查:
class(df2$Age)
我强烈怀疑结果将是“因素”。您可以使用以下方法恢复原始值:
df2$Age <- as.numeric(as.character(df2$Age))