考虑以下R代码.
> x = cbind(c(10, 20), c("[]", "[]"), c("[[1,2]]","[[1,3]]"))
> x
[,1] [,2] [,3]
[1,] "10" "[]" "[[1,2]]"
[2,] "20" "[]" "[[1,3]]"
Run Code Online (Sandbox Code Playgroud)
同样
> x = rbind(c(10, "[]", "[[1,2]]"), c(20, "[]", "[[1,3]]"))
> x
[,1] [,2] [,3]
[1,] "10" "[]" "[[1,2]]"
[2,] "20" "[]" "[[1,3]]"
Run Code Online (Sandbox Code Playgroud)
现在,我不想要整数10并将20其转换为字符串.如何在没有任何转换的情况下执行此操作?我当然也想知道为什么会发生这种转换.我查看了cbind帮助,也尝试了谷歌搜索,但没有找到解决方案的运气.我也相信在某些情况下.R将字符串转换为因子,我也不希望这种情况发生,尽管这里似乎没有发生.
Bri*_*ggs 38
向量和矩阵只能是单一类型,cbind并且rbind在向量上将给出矩阵.在这些情况下,数值将被提升为字符值,因为该类型将包含所有值.
(请注意,在您的rbind示例中,促销在c调用中发生:
> c(10, "[]", "[[1,2]]")
[1] "10" "[]" "[[1,2]]"
Run Code Online (Sandbox Code Playgroud)
如果你想要一个矩形结构,其中列可以是不同的类型,你想要一个data.frame.以下任何一项都可以满足您的需求:
> x = data.frame(v1=c(10, 20), v2=c("[]", "[]"), v3=c("[[1,2]]","[[1,3]]"))
> x
v1 v2 v3
1 10 [] [[1,2]]
2 20 [] [[1,3]]
> str(x)
'data.frame': 2 obs. of 3 variables:
$ v1: num 10 20
$ v2: Factor w/ 1 level "[]": 1 1
$ v3: Factor w/ 2 levels "[[1,2]]","[[1,3]]": 1 2
Run Code Online (Sandbox Code Playgroud)
或(特别使用的data.frame版本cbind)
> x = cbind.data.frame(c(10, 20), c("[]", "[]"), c("[[1,2]]","[[1,3]]"))
> x
c(10, 20) c("[]", "[]") c("[[1,2]]", "[[1,3]]")
1 10 [] [[1,2]]
2 20 [] [[1,3]]
> str(x)
'data.frame': 2 obs. of 3 variables:
$ c(10, 20) : num 10 20
$ c("[]", "[]") : Factor w/ 1 level "[]": 1 1
$ c("[[1,2]]", "[[1,3]]"): Factor w/ 2 levels "[[1,2]]","[[1,3]]": 1 2
Run Code Online (Sandbox Code Playgroud)
或(使用cbind,但制作第一个a,data.frame以便它组合为data.frames):
> x = cbind(data.frame(c(10, 20)), c("[]", "[]"), c("[[1,2]]","[[1,3]]"))
> x
c.10..20. c("[]", "[]") c("[[1,2]]", "[[1,3]]")
1 10 [] [[1,2]]
2 20 [] [[1,3]]
> str(x)
'data.frame': 2 obs. of 3 variables:
$ c.10..20. : num 10 20
$ c("[]", "[]") : Factor w/ 1 level "[]": 1 1
$ c("[[1,2]]", "[[1,3]]"): Factor w/ 2 levels "[[1,2]]","[[1,3]]": 1 2
Run Code Online (Sandbox Code Playgroud)
Jil*_*ina 14
使用data.frame而不是cbind应该是有帮助的
x <- data.frame(col1=c(10, 20), col2=c("[]", "[]"), col3=c("[[1,2]]","[[1,3]]"))
x
col1 col2 col3
1 10 [] [[1,2]]
2 20 [] [[1,3]]
sapply(x, class) # looking into x to see the class of each element
col1 col2 col3
"numeric" "factor" "factor"
Run Code Online (Sandbox Code Playgroud)
正如您所见,col1中的元素是numeric您所希望的.
data.frame可以有不同的变量class:numeric,factor和character,但matrix不会,一旦你把一个character元素放入一个矩阵所有其他将成为这个类,不管他们是什么CLASE之前.