2016-10-04 56 views
1

更換柱我想和B的第一行。例如,以取代A的第一列:ř從數據幀與行從另一數據幀

A <- data.frame(matrix("a", 4, 4), stringsAsFactors = FALSE) 
> A 
    X1 X2 X3 X4 
1 a a a a 
2 a a a a 
3 a a a a 
4 a a a a 

B <- data.frame(matrix("b", 4, 4), stringsAsFactors = FALSE) 
> B 
    X1 X2 X3 X4 
1 b b b b < Take this row 
2 b b b b 
3 b b b b 
4 b b b b 

我想甲成爲:

> A 
    X1 X2 X3 X4 
1 b a a a 
2 b a a a 
3 b a a a 
4 b a a a 
^
replace it with this column 

我想:

A[, 1] = B[1, ] 

,但我得到以下警告消息:

In `[<-.data.frame`(`*tmp*`, , 1, value = list(X1 = "b", X2 = "b", : 
    provided 4 variables to replace 1 variables 
+0

@Sotos不,我想替換從A柱有什麼建議是用B的列替換A的A列。 – mat

+0

是的,我沒有讀完它通過:) – Sotos

回答

2

默認情況下,R不降維的時候,只有一個排左(雖然它的時候只有一個列)。

?extract.data.frame

下降:邏輯。如果爲TRUE,則結果被強制爲可能的最小尺寸。如果只留下一列,則默認爲放棄,但如果只剩下一行,則不放棄。

你可以看到,這樣做:

A[, 1] 
# [1] "a" "a" "a" "a" 

結果是vector

B[1, ] 
# X1 X2 X3 X4 
#1 b b b b 

的結果仍然是data.frame

您需要unlist結果:

A[, 1] = unlist(B[1, ]) 
A 
# X1 X2 X3 X4 
#1 b a a a 
#2 b a a a 
#3 b a a a 
#4 b a a a 
+1

按預期工作,謝謝! – mat

0

這應該這樣做

A[, 1] = t(B[1, ]) 
+0

這幾乎工作。但是,我只想更改單元格值,而不影響列或行的名稱。理想情況下,它也應該適用於具有不同列名和行名的數據框。 – mat

1

這也應該工作,在不改變行/列名:從B.由行

A[, 1] = t(B)[,1]