r - 根据列中元素的位置对 R 中的数据框进行子集化
问题描述
我有一个数据框df,它有 5 行和 6 列。df在category1到category5列中可能有也可能没有元素
案例1:df具有category1到category5中的元素
df <- data.frame(
Hits = c("Hit1", "Hit2", "Hit3", "Hit4", "Hit5"),
category1 = c("a1", "", "b1", "a1", "c1"),
category2 = c("", "", "", "", "a2"),
category3 = c("a3", "", "b3", "", "a3"),
category4 = c("", "", "", "", ""),
category5 = c("", "", "a5", "b5", ""),
stringsAsFactors = FALSE)
案例2:df在category1到category5中没有元素
对于案例 1 ,从category1到category5的每一列,我只需要保留出现在最高位置的元素,即
最后,删除这五列中没有元素的行,即
对于案例 2,我想只保留最上面的一行,即
如何将这两种情况的解决方案合并在一起?
解决方案
您可以使用条件语句来处理这两种情况并将其包含在slice
-
library(dplyr)
df %>%
mutate(across(starts_with('category'), ~replace(., -match(TRUE, . != ''), ''))) %>%
slice({
tmp <- if_any(starts_with('category'), ~. != '')
if(any(tmp)) which(tmp) else 1
})
对于案例 1,这将返回 -
# Hits category1 category2 category3 category4 category5
#1 Hit1 a1 a3
#2 Hit3 a5
#3 Hit5 a2
对于案例 2 -
# Hits category1 category2 category3 category4 category5
#1 Hit1
推荐阅读
- java - 休眠,从 OneToMany 列表中获取用户
- c++ - 为什么2个相同数组的元素彼此相等
- java - 在 Android 发布版本中使用默认方法会引发 AbstractMethorError
- regex - 重复表达式直到它到达括号的末尾?
- python - 有什么技巧可以让我的 Python 代码在 Hackerrank 上运行得更快吗?
- ios - 以编程方式打开/关闭 UISwitch iOS
- python - 设置实例之间的加、减、并集
- python - python *args 和列表
- audio - 抖动缓冲区中播放的音频量
- sqlite - 如何使用 cl-dbi 连接到 SQlite