我有一个数据框是这样的:

df <- data.frame(c1 = c("l", "m", "n", "o"),
                 c2 = c("a", "a", "a", "a"),
                 c3 = c("b", NA, "a", "b"),
                 c4 = c("a", "a", "a", "NA"))
> print(df)
  c1 c2   c3 c4
1  l  a    b  a
2  m  a <NA>  a
3  n  a    a  a
4  o  a    b NA

我想判断每一行的第c2c3c4列的值是否相等,但忽略NA值.也就是说,所需的结果是FALSE, TRUE, TRUE, FALSE的新列.如果可能的话,我想用dplyr个函数来做这件事.

推荐答案

使用dplyr:

df %>% 
  rowwise() %>% 
  mutate(check = c_across(c2:c4) %>% n_distinct(na.rm = TRUE) == 1) %>%
  ungroup()

这使用了

  • rowwise进行每行判断
  • c_across表示使用tidyselect Select 列
  • n_distinct以查找唯一值的数量
  • ==比1.

提供:

# A tibble: 4 × 5
# Rowwise: 
  c1    c2    c3    c4    check
  <chr> <chr> <chr> <chr> <lgl>
1 l     a     b     a     FALSE
2 m     a     NA    a     TRUE 
3 n     a     a     a     TRUE 
4 o     a     b     NA    FALSE

我认为这个答案非常可读性,但一旦你有数千行,它也真的很慢.在这种情况下,您可能想在这里考虑其他答案.

R相关问答推荐

多重插补后如何按组汇总平均值?

给定R中另一行中的值,如何插补缺失值

查找满足SpatRaster中条件的单元格位置

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

在位置周围设定一个半径并识别该半径内的其他位置

如何在R中合并和合并多个rabrame?

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

如何从像glm这样的模型中提取系数表的相关性?

提取一个列表中单个列的重复观察结果R

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

R Read.table函数无法对制表符分隔的数据正常工作

使用for循环和粘贴创建多个变量

按组计算列中1出现的间隔年数

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

如果COLSUM为>;0,则COLNAME为向量

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

在不对R中的变量分组的情况下取两行的平均值

将列的值乘以在不同数据集中找到的值

如何在AER::ivreg中指定仪器?

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)