有条件地更改数据框中的值

时间:2014-03-01 01:43:51

标签: r loops dataframe

我在旧数据框中添加了一个新变量(全零)。现在在这个新的数据框中,我必须将值从0更改为1,以满足条件的观察。条件是另一个变量。

例如,我在这个新数据框中有变量xyzz是我刚刚添加的新变量,它们都是零。如果y=some number a,我想要z=1

我尝试使用一个简单的for循环来完成这个,但我不知道我在哪里做错了。

for (i==999 in data$y) {
    {data$z==1} 
}

2 个答案:

答案 0 :(得分:2)

似乎您在data$z为999时尝试将data$y设置为1,否则将其设置为0。这可以通过以下方式完成:

data$z = as.numeric(data$y == 999)

答案 1 :(得分:2)

如果你给我们reproducible example,那会有所帮助。我将创建一个:

df = data.frame(x = sample.int(5, 5),
                y = sample.int(5, 5),
                z = rep(0, 5))

df
  x y z
1 3 3 0
2 4 5 0 
3 2 1 0
4 5 4 0
5 1 2 0

您的问题表明,当df$z中的某些条件满足时,您尝试更改y的值。在R中,执行此操作的一般方法是使用下标。我强烈推荐John Cook的博客文章5 Kinds of Subscripts in R来帮助理解这一点;它是R中的其中一种,它的工作方式与大多数其他语言不同,但当你掌握它时,它变得非常方便。

所以在这种情况下:

# where is y==1?
df$y == 1
[1] FALSE FALSE  TRUE FALSE FALSE

我们可以将这个结果逻辑向量提供给像df[row, column]

这样的表达式的行索引
df[df$y == 1, ]
  x y z
3 2 1 0

如果我们想要将该行中“z”列的值设置为某个值,只需键入

df[df$y == 1, "z"] = 999
df
  x y   z
1 3 3   0
2 4 5   0
3 2 1 999
4 5 4   0
5 1 2   0