r - 对数据框中同名的列进行二元运算
问题描述
我有具有相同名称的列的数据集。
name check_id a b a b
1 item_1 00192 1 0 0 0
2 item_2 21231 0 1 0 0
3 item_3 2413 1 0 0 1
4 item_1 23423 1 0 0 0
5 item_4 232 0 0 1 0
6 item_3 232 1 0 0 1
通过在具有相同名称的列之间应用操作,我只需要留下a
一列。b
or
解决方案
这是一个使用名称的示例。这有点棘手并且可能很脆弱,但它适用于您的样本数据,并且即使您有超过 2 个重复项,也应该扩大规模。
d = read.table(text = ' name check_id a b a b
1 item_1 00192 1 0 0 0
2 item_2 21231 0 1 0 0
3 item_3 2413 1 0 0 1
4 item_1 23423 1 0 0 0
5 item_4 232 0 0 1 0
6 item_3 232 1 0 0 1', header = T, check.names = F)
names_to_replace = c("a", "b")
new_cols = list()
for (n in names_to_replace) {
# calculate new column
new_cols[[n]] = as.integer(Reduce(f = "|", x = d[names(d) == n]))
# drop old columns
d[names(d) == n] = list(NULL)
}
d = cbind(d, new_cols)
# name check_id a b
# 1 item_1 192 1 0
# 2 item_2 21231 0 1
# 3 item_3 2413 1 1
# 4 item_1 23423 1 0
# 5 item_4 232 1 0
# 6 item_3 232 1 1
推荐阅读
- javascript - React Filepond加载初始图像不起作用
- javafx - JavaFX:如果节点边界设置为最大值,如何拍摄节点快照?
- python - 无法让 Spark NLP 在 Databricks 上工作
- php - Postgresql 查询返回引号之间的字符串值 " 如果它包含任何空格字符,或者如果它没有空格字符则不带引号
- r - R中的索引数据框
- angular - Angular 9 国际化 - 请求的语言环境错误
- python - 如何沿 CSV 文件中的列写入数据?
- api - 通过 last.fm API 获取歌曲的专辑名称
- r - 使用 R 在 LoL 职业游戏中寻找最佳(或最差)协同效应的英雄
- nuget - 为什么我不打算直接引用的包会显示在 Nuget 上?