【问题标题】:Why does combining two `data.frame` objects using the `data.frame` function cut off a long variable name?为什么使用 `data.frame` 函数组合两个 `data.frame` 对象会截断长变量名?
【发布时间】:2026-01-10 22:00:01
【问题描述】:

我注意到,如果我尝试使用data.frame 函数将两个不同的data.frame 对象组合成一个更大的data.frame,变量名称将被截断(即,请参阅下面代码中names(db) 的输出。

我目前通过使用data.table 函数组合变量来避免这种情况。

我的问题是:

为什么data.frame 命令会切断我的变量名?这可能是一个很简单的问题,可以通过使用data.table 对象上的as.data.frame 函数将其转换回data.frame 来轻松解决,但我很好奇为什么变量名被截断首先,如果我只使用 data.frame 函数。我尝试使用 R 和 Google 中的帮助来寻找对此的洞察力,但到目前为止还没有成功。我正在寻求更多答案,以帮助我更好地了解 R、data.tabledata.frame 的工作原理(因为我是一个相对较新的 R 用户,最近从 Stata 切换)。

提前致谢!

> a <- data.frame(rnorm(100))
> b <- data.frame(rnorm(100))
> names(a) <- "thisisaveryverylongvariablename-mean()"
> names(b) <- "thisisanotherveryverylongvariablename-std()"
> db <- data.frame(a, b)
> names(db)
[1] "thisisaveryverylongvariablename.mean.."      "thisisanotherveryverylongvariablename.std.."
> names(c(a, b))
[1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"
> db2 <- data.table(a, b)
> names(db2)
[1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"

【问题讨论】:

    标签: r dataframe data.table


    【解决方案1】:

    变量名不被截断;简单地说,它们与 R 环境更加“兼容”。你可以用check.names=FALSE 参数覆盖它data.frame()

    a <- data.frame(rnorm(100))
    b <- data.frame(rnorm(100))
    names(a) <- "thisisaveryverylongvariablename-mean()"
    names(b) <- "thisisanotherveryverylongvariablename-std()"
    db <- data.frame(a, b, check.names = FALSE)
    names(db)
    # [1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"
    

    【讨论】: