gpt4 book ai didi

r - 在 R 中,如何用等于相同宽度的值向量替换多列中的值?

转载 作者:行者123 更新时间:2023-12-04 10:14:14 24 4
gpt4 key购买 nike

我试图用长度为 2 的向量替换 2 列中每一行的值。向您展示更容易。

首先这里是一些数据。

set.seed(1234) 
x<-data.frame(x=sample(c(0:3), 10, replace=T))
x$ab<-0 #column that will be replaced
x$cd<-0 #column that will be replaced

数据如下所示:
   x ab cd
1 0 0 0
2 2 0 0
3 2 0 0
4 2 0 0
5 3 0 0
6 2 0 0
7 0 0 0
8 0 0 0
9 2 0 0
10 2 0 0

每次 x=2 或 x=3 时,我都希望 ab=0 和 cd=1。

我的尝试是这样的:
x[with(x, which(x==2|x==3)), c(2:3)] <- c(0,1)

没有预期的结果:
   x ab cd
1 0 0 0
2 2 0 1
3 2 1 0
4 2 0 1
5 3 1 0
6 2 0 1
7 0 0 0
8 0 0 0
9 2 1 0
10 2 0 1

你能帮助我吗?

最佳答案

它不能如您所愿的原因是因为 R 以列优先布局存储矩阵和数组。当你将一个较短的数组分配给一个较长的数组时,R 会在较短的数组中循环。例如,如果你有

x<-rep(0,20)
x[1:10]<-c(2,3)

然后你最终得到
 [1] 2 3 2 3 2 3 2 3 2 3 0 0 0 0 0 0 0 0 0 0

在您的情况下发生的情况是,通过循环遍历向量 c(0,1) 来按列填充 x 等于 2 或 3 的子数组。 .我不知道有什么简单的方法可以改变这种行为。

在这里最简单的方法可能就是一次填写一列。或者,您可以执行以下操作:
indices<-with(x, which(x==2|x==3))
x[indices,c(2,3)]<-rep(c(0,1),each=length(indices))

关于r - 在 R 中,如何用等于相同宽度的值向量替换多列中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com