r - 根据不同列上以相同单词开头的元素创建列

标签 r dataframe grepl

我有一个长数据框,如下所示

df <- data.frame(col1=c(1,2,3), col2=c(3,4,5), col3=c("s1:i:2", "s1:i:3", "dv:i:2"), col4=c("dv:i:4", "dv:i:4", "NA"))


>df      
  col1 col2   col3   col4
1    1    3 s1:i:2 dv:i:4
2    2    4 s1:i:3 dv:i:4
3    3    5 dv:i:2     NA

我对以“dv”开头的值感兴趣。但是,在我的表中,根据是否存在其他值,这些值可能位于不同的列上。在本例中,由于缺少一个 s1 值,dv 值不再位于 col4 中,而是位于 col3 中。你知道我如何将所有 dv 值写在一列上吗?我想使用 grepl 之类的东西可能会有所帮助,但我不确定如何做到这一点。

我忘了补充一点,“dv”几乎可以出现在任何列中,而不仅仅是 col3 或 col4,对此感到抱歉。

最佳答案

像这样简单的事情可以工作吗?

dat$col5 <- ifelse(grepl("dv", dat$col3), dat$col3,
                   ifelse(grepl("dv", dat$col4), dat$col4, NA))

  col1 col2   col3   col4   col5
1    1    3 s1:i:2 dv:i:4 dv:i:4
2    2    4 s1:i:3 dv:i:4 dv:i:4
3    3    5 dv:i:2   <NA> dv:i:2

关于r - 根据不同列上以相同单词开头的元素创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72720036/

相关文章:

r - 获取匹配条件的第一个值(循环太慢)

r - 具有计数的不同序列模式

r - 通过 R 和神经网络 (neuralnet) 使用之前的价格预测价格

python-3.x - 如何将 Pandas 列中的变量范围与另一列相加

r - 扩展 gsub 和 grepl 以忽略给定分隔符之间的子字符串

r - 使用带有 grepl 和循环的名称列表从字符串中提取名称,并将它们添加到 R 中的新列

r - 在 R 中搜索同一句子中的一组单词

r - 如何执行 raster::rotate 的逆运算

python - 在一次更新中在 pandas 数据框中创建多个列

python - Pandas 新数据框显示每组的前 N ​​个值和后 N 个值