长期用户,首次发布。当我查看数据时,发生了一些奇怪的事情。我制作了一个data.frame,添加了列,对它们进行了操作,并重命名了它们。当我查看colnames时,重命名似乎起到了作用。但当我查看df时,实际上只有一列被重命名了。
这是一个可重复的例子。
var_tab <- data.frame(coef=c(1:4), p=rep(0.1, 4))
var_tab <- cbind (var_tab, c("one", "two", "three", "four"))
var_tab[4] <- "three"
> var_tab
coef p c("one", "two", "three", "four") V4
1 1 0.1 one three
2 2 0.1 two three
3 3 0.1 three three
4 4 0.1 four three
> colnames(var_tab)
[1] "coef"
[2] "p"
[3] "c("one", "two", "three", "four")"
[4] "V4"
一切如预期。。。直到我重命名这些列。colname并没有全部正确显示!colname发生了变化,但它们只出现在第三个变量中,而不是第四个变量中。
var_tab[4] <- ifelse(var_tab[4] == var_tab[3], 1, 0)
colnames(var_tab)[3:4] <- c("model", "base")
> var_tab
coef p model V4
1 1 0.1 one 0
2 2 0.1 two 0
3 3 0.1 three 1
4 4 0.1 four 0
> colnames(var_tab)
[1] "coef" "p" "model" "base"
这个问题可以通过在重新计算之前重命名列4来解决,因此这个问题很容易避免。
colnames(var_tab)[3:4] <- c("model", "base")
var_tab[4] <- ifelse(var_tab[4] == var_tab[3], 1, 0)
> colnames(var_tab)
[1] "coef" "p" "model" "base"
> var_tab
coef p model base
1 1 0.1 one 0
2 2 0.1 two 0
3 3 0.1 three 1
4 4 0.1 four 0
虽然我可以避免这个问题,但我仍然不明白是什么解决了这个问题。我找不到任何其他关于这个问题的提法。它模糊地让我想起了R的浮点数问题。这里有人知道是什么原因导致我的colname没有应用到数据帧吗?
提前感谢您的帮助!
设置后
var_tab <- data.frame(coef=c(1:4), p=rep(0.1, 4))
var_tab <- cbind (var_tab, c("one", "two", "three", "four"))
var_tab[4] <- "three"
注意之间的差异
str(var_tab[4] == var_tab[3])
str(var_tab[[4]] == var_tab[[3]])
第一个返回一个data.frame。当你把一个只有一列的数据.frame分配给一个数据帧的一列时,事情就会变得奇怪。外部数据帧具有包含数据帧的列的名称。该内部数据帧的列有自己的名称。
如果你给data.frame的一列指定一个干净的向量,那么你就没有这个问题。
所以你应该使用
var_tab[4] <- ifelse(var_tab[[4]] == var_tab[[3]], 1, 0)
colnames(var_tab)[3:4] <- c("model", "base")