我有一个根据用户输入动态生成的数据框架.假设有两个数据帧:

df1 <- data.frame(A=c(1,2,1,4), 
                  B=c(4,3,4,1), 
                  C=c(3,2,3,4),
                  Y=c(2,7,6,3), 
                  Z=c(5,8,9,10))
df2 <- data.frame(A=c(1,2,1,4),
                  B=c(4,3,4,1), 
                  C=c(3,2,3,4),
                  D=c(2,1,2,3),
                  Y=c(2,7,6,3), 
                  Z=c(5,8,9,10))

行号3是基于列A、B、C和D(用于df2)的行号1的副本.我知道通常情况下我可以用

library(dplyr)
df1 |> distinct(A,B,C, .keep_all=TRUE)
df2 |> distinct(A,B,C,D, .keep_all=TRUE)

但问题是列A-D是动态生成的.可能是A列和B列,可能是A-F列...唯一的常量是列Y和Z.有没有一种方法可以使用distinct(),但除了Y和Z之外的所有列?

我想把列名放到一个列表中,删除两个变量,然后将其替换到不同的调用中

names <- colnames(df2)
names <- names[names != c("Y", "Z")]
df2 |> distinct(names, .keep_all=TRUE)

但当然,它正在寻找一个名为"名字"的栏目.任何帮助都将不胜感激.

推荐答案

解决方案由@Ben提供.

df2 |> distinct(pick(-c("Y", "Z")), .keep_all = TRUE)

R相关问答推荐

单击 map 后,将坐标复制到剪贴板

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

在使用ggroove后,将图例合并在gplot中

为什么在ggplot2中添加geom_text这么慢?

然后根据不同的列值有条件地执行函数

将嵌套列表子集化为嵌套列表

将数据集中的值增加到当前包含的最大值

提取具有连续零值的行,如果它们前面有R中的有效值

在R中使用download. file().奇怪的URL?

多个过滤器内的一个盒子在仪表板Quarto

移除仪表板Quarto中顶盖和车身之间的白色区域

在ggplot中为不同几何体使用不同的 colored颜色 比例

在ggplot2的框图中绘制所有级别的系数

SHINY:使用JS函数应用的CSS样式显示HTML表格

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

更新R中的数据表(使用data.table)

将向量元素重新排序为R中的第二个

将全局环境变量的名称分配给列表中的所有元素

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

R仅当存在列时才发生变异