如何更改特定列中等于给定值的值?

时间:2012-08-08 15:27:42

标签: r dataframe

data_active是任何数据集。

理想情况下,当满足条件时,必须更改值。但是当我执行这段代码时,它会将每个指定列中的值更改为if语句中给出的值。

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St="MH" 
  data_active$Reg="South Central" 
  data_active$REGION="South"
  data_active$Market="86"
 }
}

4 个答案:

答案 0 :(得分:6)

你需要习惯'用R思考'的心态。您不需要循环或if语句。只需一行代码即可完成此操作。

尝试以下操作(将id替换为您的列名称):

data_active[data_active$id == 4866,c("St","Reg","REGION","Market")] <- c("MH","South Central", "SOUTH", "86")

首先,这句话是找到id匹配4866的行,并从中选择由c创建的列表中的列。

data_active[data_active$id == 4866,c("St","Reg","REGION","Market")]

其次,它将这些列的值设置为一个新列表,其中包含您想要的值。

<- c("MH","South Central", "SOUTH", "86")

答案 1 :(得分:3)

if语句中,您已为整个列分配了一个值,而不仅仅是i指示的行。要仅分配给特定行,您需要仅分配向量的该元素。

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St[i]="MH" 
  data_active$Reg[i]="South Central" 
  data_active$REGION[i]="South"
  data_active$Market[i]="86"
 }
}

那就是说,这不是R中这样做的惯用方式。更自然的是使用逻辑索引。

data_active$St[data_active[,1]==4866]="MH" 
data_active$Reg[data_active[,1]==4866]="South Central" 
data_active$REGION[data_active[,1]==4866]="South"
data_active$Market[data_active[,1]==4866]="86"

答案 2 :(得分:2)

您必须指明要更改的行的值。否则,每次data_active[i,1]==4866都会为所有行提供新值。

试试这个:

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St[i]="MH" 
  data_active$Reg[i]="South Central" 
  data_active$REGION[i]="South"
  data_active$Market[i]="86"
 }
}

答案 3 :(得分:1)

与Ina解决方案几乎完全相同,但也适用于不同类型的列(请参阅Brian Diggs对Ina解决方案的评论)。

data_active[data_active$id == 4866,
            c("St","Reg","REGION","Market")] <- list("MH","South Central", "SOUTH", "86")