我有一个数据集,其中两列包含以下内容:指标编号和哈希码
唯一的问题是这些列具有相同的名称,但是该值可以切换列。 现在,我想合并列并保留数字(我不在乎哈希码)
我看到了这个问题:Merge two columns into one in r
我尝试了coalesce()
函数,但这仅用于具有NA值。我没有。我查看了unite函数,但是根据备忘单文档documentation here,这不是我想要的
我的下一个尝试是filter_at
和dplyr软件包Documentation here中的其他过滤器功能
但是这只剩下150个数据点,而开始时我有61k数据点。 我尝试过的filter_at代码:
data <- filter_at(data,vars("hk","hk_1"),all_vars(.>0))
我假设#字符串不应大于0,这似乎是正确的,但它删除的内容多于意图。
我想保留hk或hk_1的值。另一个(哈希)可以删除。然后我想要一个仅包含这些数字的新列。
样本数据
我的数据如下:
HK|HK1
190|#SP0839
190|#SP0340
178|#SP2949
#SP8390|177
#SP2240|212
我想看的东西
HK
190
190
178
177
212
我希望这可以提供有关数据的见解。还有更多的列,例如description等,这些列使开始的190不是两倍。
答案 0 :(得分:0)
我们可以将以"#"
开头的所有值替换为NA
,然后使用coalesce
在HK
和HK1
之间选择非NA值。
library(dplyr)
df %>%
mutate_all(~as.character(replace(., grepl("^#", .), NA))) %>%
mutate(HK = coalesce(HK, HK1)) %>%
select(HK)
# HK
#1 190
#2 190
#3 178
#4 177
#5 212
数据
df <- structure(list(HK = structure(c(4L, 4L, 3L, 2L, 1L), .Label = c("#SP2240",
"#SP8390", "178", "190"), class = "factor"), HK1 = structure(c(2L,
1L, 3L, 4L, 5L), .Label = c("#SP0340", "#SP0839", "#SP2949",
"177", "212"), class = "factor")), class = "data.frame", row.names = c(NA, -5L))