使用键重新映射数据库

标签 r dataframe dplyr lapply

我有一个要使用关键数据集更新的数据集。 我想将数据集 (group_1:group_3) 中的条目更改为相应的值。

请注意,实际上我的关键数据集有超过 25k 个条目,寻求有效的解决方案正是我来到这里的原因!感谢所有帮助。

玩具示例

df <- data.frame(state=rep("state_a"),
             candidate=c("a","b","c"),
             group_1= c("g_1","g_2","g_3"),
             group_2= c("g_4","g_5",NA),
             group_3= c("g_5",NA,NA))

key <- data.frame(group=c("g_1","g_2","g_3","g_4","g_5"),
              leader=c("l_1","l_2","l_3","l_4","l_4"))

结果:

df <- data.frame(state=rep("state_a"),
             candidate=c("a","b","c"),
             group_1= c("g_1","g_2","g_3"),
             group_2= c("g_4","g_5",NA),
             group_3= c("g_5",NA,NA))

额外请求: 我想使用 df_2 (与 df 相同的维度)来决定保留哪些条目 df_final,然后进行转换。

df_2 <- data.frame(state=rep("state_a"),
                   candidate=c("a","b","c"),
                   value_1= c("1","2","0"),
                   value_2= c("3","2",NA),
                   value_3= c("5",NA,NA))

df_final_temp <- data.frame(state=rep("state_a"),
             candidate=c("a","b","c"),
             group_1= c("g_1","g_2",NA),
             group_2= c("g_4","g_5",NA),
             group_3= c("g_5",NA,NA))

df_final <- data.frame(state=rep("state_a"),
             candidate=c("a","b","c"),
             group_1= c("l_1","l_2",NA),
             group_2= c("l_4","l_5",NA),
             group_3= c("l_5",NA,NA))

最佳答案

一个选项是使用键/值对作为命名向量来匹配列

df[-(1:2)] <- setNames(as.character(key$leader), key$group)[as.matrix(df[-(1:2)])]    


df
#    state candidate group_1 group_2 group_3
#1 state_a         a     l_1     l_4     l_4
#2 state_a         b     l_2     l_4    <NA>
#3 state_a         c     l_3    <NA>    <NA>

关于使用键重新映射数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56996714/

相关文章:

python - SQL "partition by"Python/R 中的类似功能

r - ggplot : 2 facets with multiple lines

python - Pandas 数据框太大而无法附加到 dask 数据框?

r - 根据轴刻度位置显示的数据为 ggplot2 轴刻度标签着色

python - Pandas groupby - 一组不同的值

python - 要插入数据框-pandas 中的选定行

r - 使用 dplyr 按组计算比率

r - 从数据框中有条件地选择重复测量

r - 使用 plotlyProxyInvoke 在不调整绘图大小的情况下向绘图添加垂直线

r - 如何在超过 6 组的维恩图中添加计数值?