根据值将两列合并为一列

时间:2020-03-22 13:09:57

标签: r

我有一个数据集,其中两列包含以下内容:指标编号和哈希码

唯一的问题是这些列具有相同的名称,但是该值可以切换列。 现在,我想合并列并保留数字(我不在乎哈希码)

我看到了这个问题: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不是两倍。

1 个答案:

答案 0 :(得分:0)

我们可以将以"#"开头的所有值替换为NA,然后使用coalesceHKHK1之间选择非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))