替换R中两列的值

时间:2014-01-31 17:34:25

标签: r replace multiple-columns

我有一个24列的数据框,第二和第三列看起来像

1  2230
1  2300
1  2330 
1  2400
2  30
2  100

这只是列的一部分。第二列有48个,然后是48个,然后是48个三等等,一直到365个。第三列是半小时时间,然后从30开始,然后是100然后是130然后是200,依此类推,一直到2400。每一列我最后都得到了上面的例子,其中最后一个对应于2400.我需要遍历每一列并将2400替换为0,并将最后一个值与2400相关联的值加一,所以我最终得到

1  2230
1  2300
1  2330 
2  0
2  30
2  100

我可以轻松替换单个列的值,但我不知道如何对两列执行此操作,其中一列依赖于另一列。我尝试使用for循环和if语句但是不能使它工作。

3 个答案:

答案 0 :(得分:3)

应该相当简单 - 如果您的data.frame(df)包含列daytime

df[df$time==2400,]$day <- df[df$time==2400,]$day + 1

df[df$time==2400,]$time <- 0

如果您愿意学习使用data.table软件包,这会更容易:

df[time==2400, c("day", "time"):= list(day + 1, 0)]

答案 1 :(得分:0)

单线解决方案:

df[df[3] == 2400, 2:3] <- cbind(df[df[3] == 2400, 2] + 1, 0)

在这里,我们只识别具有2400作为第3列值的行,然后将第2列和第3列替换为第2列+ 1和零。

答案 2 :(得分:0)

有几种方法可以做到这一点,但一种非常简单的矢量化方法是使用检测数组在第三列中查找“2400”值。

detection_array <- data[,3]==2400
data[detection_array,2] <- data[detection_array,2] + 1
data[detection_array,3] <- 0

第1步:创建一个TRUE / FALSE值数组,在第三列中标识值“2400”。

detection_array <- data[,3]==2400

第2步:在第二列的关联值中添加“1”。

data[detection_array,2] <- data[detection_array,2] + 1

第3步:将第三列中的已识别值更改为“0”。

data[detection_array,3] <- 0