1

我正在使用 cbind 将字符串和数字矩阵组合在一起,并将所有数字列(第一个除外)返回为 NULL。这是示例代码:

nums <- matrix(data=c(1,2,3,4),ncol=2)
strs <- list()
strs[1] <- 'row1'
strs[2] <- 'row2'
result <- cbind(strs,nums)

> result
     strs         
[1,] "row1" 1 NULL
[2,] "row2" 2 NULL

我显然忽略了一些简单的事情。谢谢您的帮助,

4

2 回答 2

3

在这种情况下,我认为您以稍微错误的方式解决问题。cbind返回一个矩阵。矩阵的限制之一是所有元素必须属于同一类型。这意味着您的c(1, 2, 3, 4)意志在被强制转换为矩阵时,将成为存在的最高级别数据类型(在本例中为字符来自strs)并等效于c("1", "2", "3", "4").

我将假设您有一个strs包含 2 个元素的列表,并且您真正想要的是一个 data.frame(它能够容纳不同的类型)。

无论哪种情况,让我们先转换strs成一个字符:

strs2 <- unlist(strs)
[1] "row1" "row2"

请注意,这与您通过c("row1", "row2"). 接下来,我们将创建一个 data.frame:

result <- data.frame(strs2, nums)
  strs2 X1 X2
1 row1   1  3
2 row2   2  4

这与@thelatemail 提供的解决方案基本相同。

于 2012-11-20T23:39:33.790 回答
1

将列表与 结合起来cbind()可能会出现问题。我会按照 sebastian-c 在评论中所说的或unlist()首先使用strs

cbind(unlist(strs), nums)

或者只是使用matrix()

matrix(c(strs, nums), ncol = 3)

如果nums有可变数量的列:

matrix(c(strs, nums), ncol = ncol(nums) + 1)
于 2012-11-20T11:22:29.097 回答