我有一个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语句但是不能使它工作。
答案 0 :(得分:3)
应该相当简单 - 如果您的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)]
答案 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