R数据框行名称显示矩阵而不是数值

时间:2013-01-18 17:04:18

标签: r dataframe rowname

我有以下内容来创建数据框。我的问题是数据框行名称显示为[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

2 个答案:

答案 0 :(得分:4)

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

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

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

此外,您可以通过

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

但这太过分了。

答案 1 :(得分:0)

注意:我不建议您使用这些方法中的任何一种。如果你想要一个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)用cbind包装as.data.frame(.)参数。

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