【问题标题】:R data frame row name shows matrix instead of numeric valueR数据框行名显示矩阵而不是数值
【发布时间】:2013-01-18 17:04:17
【问题描述】:

我有以下创建数据框。我的问题是数据框行名称显示为 [1,],[2,],[3,],[4,] 等,而不仅仅是 1,2,3,4 等(见下文输出) .为什么以及如何解决这个问题,让我的行名像往常一样显示(递增的数字)。

Code:

df <- data.frame(id=c("id"),nobs=c("nobs"))
df <- cbind(id,nobs)
df

id 和 nobs 是两个向量,每个向量有 5 个数值...

Current output:
     id nobs
[1,]  2 3653
[2,]  4 3653
[3,]  8 1462
[4,] 10 1097
[5,] 12  732

Desired output:
   id nobs
1  2 3653
2  4 3653
3  8 1462
4 10 1097
5 12  732

【问题讨论】:

    标签: r dataframe rowname


    【解决方案1】:

    您的第二个命令完全覆盖第一个命令。你想要的是

    df <- data.frame(id=id, nobs=nobs)
    

    由于您对cbind 的输入是向量(我假设),因此默认情况下它返回一个矩阵。

    此外,您可以通过

    将其强制为数据框
    df <- data.frame(cbind(id, nobs))
    

    但这太过分了。

    【讨论】:

    • +1 推荐直接使用data.frame()。太多的人陷入了使用cbind 构建数据帧的漩涡,而这通常只会导致问题。
    • 谢谢保罗。那行得通,我现在理解得更好了。另外,很抱歉,如果我没有将您的答案选为所选答案。我刚从阿伦那里看到的第一个。
    【解决方案2】:

    注意:我不建议您使用这些方法中的任何一种。如果你想要一个data.frame,你可以像 Paul 展示的那样直接创建它(或者你自己已经完成了)。这只是为了说明为什么会发生这种情况。尽管有时在使用 sapply 时,例如,输出将是一个矩阵,您可能希望绑定 2 个这样的矩阵并将它们作为 data.frame

    来自cbind (?cbind) 的帮助页面:

    函数 cbind 和 rbind 是 S3 通用的,带有用于数据帧的方法。如果至少一个参数是数据框,其余是向量或矩阵,则将使用数据框方法。

    数据框方法

    cbind 数据框方法只是 data.frame(..., check.names = FALSE) 的包装器。这意味着它将拆分数据框参数中的矩阵列,并将字符列转换为因子,除非指定了 stringsAsFactors = FALSE。

    因此,如果您传递两个向量,则不会调用 data.frame 的包装器。因此,您获得了一个矩阵。

    你能做什么?
    1) 您可以创建 至少一个 data.frame 参数并将其传递给 cbind
    2) 用as.data.frame(.) 包装cbind 参数。

    x <- 1:5
    y <- 6:10
    > cbind(data.frame(x), y)
      x  y
    1 1  6
    2 2  7
    3 3  8
    4 4  9
    5 5 10
    
    > as.data.frame(cbind(x,y))
      x  y
    1 1  6
    2 2  7
    3 3  8
    4 4  9
    5 5 10
    

    【讨论】:

    • 谢谢阿伦!这很有帮助。我是 R 新手,现在我看到了内置帮助实际上是如何有用的。我怀疑它,但只是不确定。另外,对不起,如果我没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2021-10-13
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多