r - 如何根据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
因此,在第三列中的值发生变化之前,我想将同一行的第二列元素替换为具有相同第三列值的第一列的第一个元素。
解决方案
这是一个解决方案,它使用rle
并cumsum
确定第 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 日创建
推荐阅读
- r - rvest 返回 {xml_nodeset (0)}
- javascript - 如何模拟与其他函数分开导入的函数并在 JS 中返回首选 JSON?
- google-app-engine - Google Cloud App Engine - 默认存储桶
- python - Pandas:跨列查找共同值
- flutter - 在 Flutter 中的 Stack 小部件内移动、缩放和调整定位小部件
- microsoft-graph-api - Microsoft Graph 教育类通过选择扩展
- ios - 解决“无法同时满足约束”错误的最佳方法是什么?
- php - 从外部站点返回 index.php/about
- r - R:如何获取存储在向量中的数据框?
- amazon-web-services - 对从公共 EC2 实例通过 SSH 连接到私有 EC2 实例感到困惑