首页 > 解决方案 > 如何根据R中其他列中的值更改来更改列元素

问题描述

我有以下数据:

1   2   1           
2   3   1           
3   4   1           
4   5   1           
5   6   2           
6   7   2           
7   8   2                       
9   10  3           
10  11  3           

..我想根据第三列值的变化来改变第二列的一个元素,以获得这个:

1   2   1           
2   3   1           
3   4   1           
4   1   1           
5   6   2           
6   7   2           
7   5   2                       
9   10  3           
10  9   3               

因此,在第三列中的值发生变化之前,我想将同一行的第二列元素替换为具有相同第三列值的第一列的第一个元素。

标签: rdataframe

解决方案


这是一个解决方案,它使用rlecumsum确定第 2 列中需要更新的元素的索引。

# Create data frame
df <- read.table(text = "1   2   1           
2   3   1           
3   4   1           
4   5   1           
5   6   2           
6   7   2           
7   8   2                       
9   10  3           
10  11  3    ", header = FALSE)

# Create index
ind <- cumsum(rle(df$V3)$lengths) 

# Update data frame
df[ind, 2] <- df[head(c(1, ind + 1), length(ind)), 1]

# Print result
print(df)
#>   V1 V2 V3
#> 1  1  2  1
#> 2  2  3  1
#> 3  3  4  1
#> 4  4  1  1
#> 5  5  6  2
#> 6  6  7  2
#> 7  7  5  2
#> 8  9 10  3
#> 9 10  9  3

reprex 包(v0.2.1)于 2019 年 1 月 16 日创建


推荐阅读