R用来自另一个数据帧的行替换数据帧中的列

时间:2016-10-04 07:50:08

标签: r

我想将A的第一列替换为B的第一行。例如:

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成为:

> 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

3 个答案:

答案 0 :(得分: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 :(得分:1)

这也应该有效,而不会改变行/列名称:

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

答案 2 :(得分:0)

这应该这样做

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