我有一个数据框如下:
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)
但是,我想一次对几行执行此操作。有什么办法可以做到这一点吗?
在这种情况下你需要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)
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |