[英]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.