2013-03-30 73 views
0

如果我有以下對象轉換行/串到一列中的R

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

如何將其轉換爲,這樣我可以把它放在一列,它與我在其他列對齊我的數據幀:

0 
1 
0 
0 
0 
0 
0 

我想list可能工作......但應該

很抱歉這項工作要求一個假設是其功能的基本問題...

+1

我猜你正在尋找'cbind',但我可以沒有一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5964905)你有什麼對象。 –

+0

我認爲這可能是一個矢量,而不是一個字符串。我會建議閱讀許多在線教程之一或拿起一本書。 – N8TRO

+0

藍色魔導師和內森是對的。如果你只想轉置vector,你可以使用't'函數 – JT85

回答

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.framevector的長度必須相同,如果您想將vector添加到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和第二保持你的data.frame DF因此,創造一個list作爲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 

或者,您也可以將您的data.frame轉換成list(一個data.frame內部一個list是),並創建一個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 

請注意,as.list強制將data.frame列轉換爲list列,並且其名稱爲data.frame的列名稱。然後,我們使用c運算符創建新的list z,然後創建concatenate

希望這會讓你的理解有所改觀。

+0

+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 
+0

(+1)關於回收的第一部分。這很重要,我似乎錯過了它。 – Arun