繁体   English   中英

替换R中两列的值

[英]replacing values from two columns in R

我有一个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语句,但不能使它工作。

它应该相当简单 - 如果您的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)]

单线解决方案:

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

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

有几种方法可以做到这一点,但一种非常简单的矢量化方法是使用检测数组在第三列中查找“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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM