我想从数据集中识别(然后删除)字符向量,这些字符向量都相等(例如,没有任何变化):
test_data <- tibble(a = c("A", "B", "C"), b = c("A", "A", "A"), c = c("", "", ""), d = 1:3)
test_data
# A tibble: 3 x 4
a b c d
<chr> <chr> <chr> <dbl>
1 A A "" 1
2 B A "" 2
3 C A "" 3
我希望结果是这样的:
# A tibble: 3 x 2
a d
<chr> <dbl>
1 A 1
2 B 2
3 C 3
我当然可以做到:
out <- c("b", "c")
test_data %>% select(- one_of((out)))
但是由于我有很多这些列和很多行,所以我不想不必“手动”进行操作。
答案 0 :(得分:3)
您可以这样做:
process.env.MONGODB_URL
或者:
test_data %>%
select_if(~ !all(. == first(.)))
a
<chr>
1 A
2 B
3 C
答案 1 :(得分:2)
Base R解决方案
# (1)
test_data[sapply(test_data, function(x) length(unique(x)) > 1)]
# (2)
Filter(function(x) length(unique(x)) > 1, test_data)
dplyr 1.0.0解决方案
test_data %>%
select(where(~ n_distinct(.x) > 1))
输出
# # A tibble: 3 x 2
# a d
# <chr> <int>
# 1 A 1
# 2 B 2
# 3 C 3
答案 2 :(得分:1)
您还可以使用keep
:
test_data%>%
keep(~length(unique(.))>1)
# A tibble: 3 x 2
a d
<chr> <int>
1 A 1
2 B 2
3 C 3
答案 3 :(得分:1)
有点晚了,但是您也可以使用base::Filter()
来识别仅包含重复项的列:
Filter(function(x) !all(duplicated(x)[-1L]), test_data)
# A tibble: 3 x 1
a
<chr>
1 A
2 B
3 C
答案 4 :(得分:1)
在Filter
中有length
个元素unique
中的base R
和Filter(function(x) length(unique(x)) > 1, test_data)
# A tibble: 3 x 2
# a d
# <chr> <int>
#1 A 1
#2 B 2
#3 C 3
的选项
dplyr
或与library(dplyr)
test_data %>%
select(where(~ length(unique(.)) > 1))
Ready to Program