首页 > 解决方案 > 根据值将两列合并为一列

问题描述

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

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

我看到了这个问题:在 r 中将两列合并为一列 ,我尝试了该coalesce()函数,但这仅适用于具有 NA 值。我没有。我查看了联合功能,但根据这里的备忘单文档文档,这不是我要找的

我的下一个尝试是filter_at来自 dplyr 包文档的其他过滤器功能

但这只剩下 150 个数据点,而一开始我有 61k 个数据点。我试过的 filter_at 代码:

data <- filter_at(data,vars("hk","hk_1"),all_vars(.>0))

我假设 #-string 不应大于 0,这似乎是真的,但它删除的内容超出了预期。

我想保留 hk 或 hk_1 值,这是一个数字。可以删除另一个(哈希)。然后我想要一个只包含这些数字的新列。


样本数据

我的数据如下所示:

HK|HK1
190|#SP0839
190|#SP0340
178|#SP2949
#SP8390|177
#SP2240|212

我想看到的:

HK
190
190
178
177
212

我希望这可以提供对数据的洞察力。还有更多的列,如描述等,这使得一开始的 190 不是双倍的。

标签: r

解决方案


"#"我们可以替换所有以to开头的值,NA然后用于在andcoalesce之间选择非 NA 值。HKHK1

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))

推荐阅读