如果我有以下對象轉換行/串到一列中的R
[1] 0 1 0 0 0 0 0 0 0
如何將其轉換爲,這樣我可以把它放在一列,它與我在其他列對齊我的數據幀:
0
1
0
0
0
0
0
我想list
可能工作......但應該
很抱歉這項工作要求一個假設是其功能的基本問題...
如果我有以下對象轉換行/串到一列中的R
[1] 0 1 0 0 0 0 0 0 0
如何將其轉換爲,這樣我可以把它放在一列,它與我在其他列對齊我的數據幀:
0
1
0
0
0
0
0
我想list
可能工作......但應該
很抱歉這項工作要求一個假設是其功能的基本問題...
如果你有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
和vector
的長度必須相同,如果您想將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
。
希望這會讓你的理解有所改觀。
+1非常好,詳細 –
除了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
(+1)關於回收的第一部分。這很重要,我似乎錯過了它。 – Arun
我猜你正在尋找'cbind',但我可以沒有一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5964905)你有什麼對象。 –
我認爲這可能是一個矢量,而不是一個字符串。我會建議閱讀許多在線教程之一或拿起一本書。 – N8TRO
藍色魔導師和內森是對的。如果你只想轉置vector,你可以使用't'函數 – JT85