繁体   English   中英

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

[英]R data frame row name shows matrix instead of numeric value

我有以下创建数据框的方法。 我的问题是数据框行名称显示为[1,],[2,],[3,],[4,]等,而不只是1,2,3,4等(有关输出,请参见下文) 。 为什么以及如何解决此问题,使行名照常显示(增加的数字)。

Code:

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

id和nob是两个具有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

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

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

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

另外,您可以通过以下方式将其强制为数据框

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

但这太过分了。

注意:我不建议您使用这两种方法。 如果需要data.frame ,则可以按Paul所示(或您自己完成)直接创建。 这只是为了说明为什么会发生这种情况。 尽管有时例如使用sapply时,输出将是一个矩阵,并且您可能希望绑定2个这样的矩阵并将它们作为data.frame

cbind?cbind )的帮助页面:

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

数据框方法

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

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

你能做什么?
1)您可以创建至少一个 data.frame参数并将其传递给cbind
2)用cbind 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM