【发布时间】:2019-07-08 15:02:19
【问题描述】:
您好,我有一个如下所示的数据框:
path.vec source.vec
1 apple Tuesday
2 lemon Monday
3 orange Wednesday
4c("apple", "lemon", "grape") c("Friday", "Monday", "Sunday")
5c("cheery", "lemon", "grape") c("Saturday", "Monday", "Sunday")
6c("apple", "lemon", "apple") c("Thursday", "Monday", "Sunday")
只有 2 个变量:path.vec 和 source.vec。两者都在收集相同数据的 2 个不同阴影
我只想在满足条件时在具有相同索引的列表之间交换元素。
比例应该是:
如果 df$path.vec 包含与 df$source.vec 相同索引元素的“apple”交换
我尝试了以下方法:
df$path.vec <- ifelse(grepl("apple", df$path.vec), df$source.vec, df$path.vec)
但这会改变所有元素,当至少有一个元素 =="apple" 时,我只想改变元素“apple”。我在想我可能需要先找到索引,然后再根据索引进行交换? 我试过了
ind <- which(df$path.vec %in% c("apple"))
但在我的真实数据集中这是一个错误
Error in `$<-.data.frame`(`*tmp*`, path.index, value = 1:6) :
replacement has 6 rows, data has 33422
因为它只是在 apple 是列表中唯一的元素时才进行索引。
我也试过了
df$path.index <- match("apple", df$path.vec)
但这只会导致我的数据帧的每一行都有 1 个。
这是解决此问题的最佳方法吗?
最终我想获得另一列,如下所示:
path.final
1 Tuesday
2 lemon
3 orange
4c("Friday", "lemon", "grape")
5c("cheery", "lemon", "grape")
6c("Thursday", "lemon", "Sunday")
干杯,
【问题讨论】:
标签: vector indexing replace match rstudio