[英]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
)具有列day
和time
:
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.