我有一个长数据框,如下所示
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/