r - 根据值将两列合并为一列
问题描述
我有一个包含两列的数据集,其中包含以下内容:指标编号和哈希码
唯一的问题是列名称相同,但值可以切换列。现在我想合并列并保留数字(我不关心哈希码)
我看到了这个问题:在 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 不是双倍的。
解决方案
"#"
我们可以替换所有以to开头的值,NA
然后用于在andcoalesce
之间选择非 NA 值。HK
HK1
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))