将行/字符串转换为R中的单个列

时间:2013-03-30 06:01:57

标签: r dataframe

如果我有以下对象

[1] 0 1 0 0 0 0 0 0 0

如何将其转换为此类,以便我可以将其放在一列中,并与数据框中的其他列对齐:

0
1
0
0
0
0
0

我认为list可能有用......但是这个功能应该起作用

很抱歉要求假设是基本问题......

2 个答案:

答案 0 :(得分:2)

如果你有data.frame说," DF",就像这样:

DF <- data.frame(x=1:9, y=letters[1:9])

你是vector z:

z <- c(0, 1, 0, 0, 0, 0, 0, 0, 0)

注意如果要将data.frame添加到vectorvector的行数和data.frame的长度必须相同dim(DF) # dimensions of data.frame # [1] 9 2 length(z) # length of vector # [1] 9 作为新列。

cbind

现在,您可以使用cbind(DF, z) # x y z # 1 1 a 0 # 2 2 b 1 # 3 3 c 0 # 4 4 d 0 # 5 5 e 0 # 6 6 f 0 # 7 7 g 0 # 8 8 h 0 # 9 9 i 0 获取新列,如下所示:

vector

如果您的data.frame的长度不等于z <- c(0, 1, 0, 0, 0, 0, 0) # length is 7 cbind(DF, z) # Error in data.frame(..., check.names = FALSE) : # arguments imply differing number of rows: 9, 7 行的长度,那么,

cbind

list由于长度不等导致错误。在这种情况下,我可以想到几种方法将其存储为data.frame

首先,您可以保留list DF,并创建data.frame,其第一个元素为vector,第二个元素为my_l <- list(d1 = DF, d2 = z) # $d1 # x y # 1 1 a # 2 2 b # 3 3 c # 4 4 d # 5 5 e # 6 6 f # 7 7 g # 8 8 h # 9 9 i # # $d2 # [1] 0 1 0 0 0 0 0 ,如下所示:< / p>

data.frame

或者,您可以将list转换为data.framelist内部为list)并创建vectors,其元素均为my_l <- c(as.list(DF), list(z=z)) # $x # [1] 1 2 3 4 5 6 7 8 9 # # $y # [1] a b c d e f g h i # Levels: a b c d e f g h i # # $z # [1] 0 1 0 0 0 0 0 {1}}如下:

as.list

请注意,data.frame会将list列强制转换为data.frame,并将list的列名称命名为concatenate。然后,我们使用c运算符创建新的{{1}} z,然后{{1}}。

希望这会更好地理解你的理解。

答案 1 :(得分:2)

除了Aruns伟大而详细的答案外,还有两件事值得注意:

首先,R回收较短的项目以匹配较长项目的长度。在向data.frame添加向量的情况下,只有在data.frame的行数是向量长度的精确倍数时才会出现这种情况。

 zshort <- c(1, 2, 3)

# will be `0` if exact multiple:
length(zshort)  %/% nrow(DF)
# [1] 0

cbind(DF, zshort)
#  cbind(DF, zshort)
#  x y zshort
#  1 a      1
#  2 b      2
#  3 c      3
#  4 d      1   <~~ Recycling
#  5 e      2
#  6 f      3
#  7 g      1   <~~ Recycling
#  8 h      2
#  9 i      3

(2)您还可以使用“[”向data.frame添加新列,如下所示:

# name of the column does NOT have to be
#  the same as the name of the vector
DF[, "newName"] <- z

DF[, "shortz"]  <- zshort

# You can also delete existing columns
DF[, "y"]  <- NULL

DF
#   x newName shortz
#   1       1      1
#   2       2      2
#   3       3      3
#   4       1      1
#   5       2      2
#   6       3      3
#   7       1      1
#   8       2      2
#   9       3      3