R 替换数据框中的多行

Dag*_*man 4 r dataframe

我有一个数据框如下:

df = data.frame(n=c(1, 2, 3), m=c(4, 5, 6))
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

    n m
  1 1 4
  2 2 5
  3 3 6
Run Code Online (Sandbox Code Playgroud)

现在假设我想用向量替换前两行c(1, 2)。我尝试这样做:

df[1:2,] = c(1, 2)
Run Code Online (Sandbox Code Playgroud)

但这会产生结果

    n m
  1 1 1
  2 2 2
  3 3 6
Run Code Online (Sandbox Code Playgroud)

但我想要的是

    n m
  1 1 2
  2 1 2
  3 3 6
Run Code Online (Sandbox Code Playgroud)

我尝试设置c(1, 2)为 1x2 的矩阵,看看是否会替换行“行优先”而不是“列优先”,但这不起作用(仍然替换“列优先”)。将矩阵尺寸更改为 2x1 也没有效果。然后我尝试制作c(1, 2)一个数据框并使用数据框替换行,如下所示df[1:2,] = data.frame(c(1, 2)),但这仍然产生了不需要的结果。如果我使用它的转置替换数据帧,也会发生同样的事情t()。有没有办法先替换数据帧行中的行?显然,如果我一次只选择一行,例如 df[1,] = data.frame(c(1, 2)) 它工作得很好,给我

    n m
  1 1 2
  2 2 5
  3 3 6
Run Code Online (Sandbox Code Playgroud)

但是,我想一次对几行执行此操作。有什么办法可以做到这一点吗?

U10*_*ard 5

在这种情况下你需要list

> df[1:2,] <- list(1, 2)
> df
  n m
1 1 2
2 1 2
3 3 6
> 
Run Code Online (Sandbox Code Playgroud)

它会得到不同的分配:

> list(1, 2)
[[1]]
[1] 1

[[2]]
[1] 2

> c(1, 2)
[1] 1 2
> 
Run Code Online (Sandbox Code Playgroud)

一个更具体的例子来说明它在后台会做什么:

> list(n=1, m=2)
$n
[1] 1

$m
[1] 2

> 
Run Code Online (Sandbox Code Playgroud)