过滤数据框并在 r 中的多列上应用截止值
filter a data frame and applying a cutoff on multiple columns in r
我有一个数据框如下:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] A 4 NA NA 1.55 4 NA
[2,] B NA NA 4 0.56 NA NA
[3,] C 4 4 NA 0.62 4 4
[4,] D NA NA NA 1.61 4 NA
[5,] E 4 NA NA 0.5 4 NA
过滤后我想得到的输出是:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[3,] C 4 4 NA 0.62 4 4
[5,] E 4 NA NA 0.5 4 NA
我希望在第 2 到 4 列中至少有一个值等于 4,在第 6 到 7 列中至少有一个值等于 4。
我正在考虑使用以下命令,但我不确定如何以正确的方式使用它来提供正确的输出。
这是命令:
new.df <- df %>%
dplyr::filter_at((vars(c(2:4)), any_vars(. == 4) & vars(c(6:7)), any_vars(. == 4))
你知道我怎样才能得到想要的 new.df 吗?
谢谢!
我不确定有什么问题,除非它对您来说太冗长并且您想要一种不命名列的方法。
df = data.frame(col1 = c("A", "B", "C", "D", "E"),
col2 = c(4, NA, 4, NA, 4),
col3 = c(NA, NA, 4, NA, NA),
col4 = c(NA, 4, NA, NA, NA),
col5 = c(1.55, 0.56, 0.62, 1.61, 0.5 ),
col6 = c(4, NA, 4, 4, 4),
col7 = c(NA, NA, 4, NA, NA))
df %>% filter((col2 == 4| col3 == 4 | col4 == 4) & (col6 == 4 | col7 == 4))
产生:
col1 col2 col3 col4 col5 col6 col7
1 A 4 NA NA 1.55 4 NA
2 C 4 4 NA 0.62 4 4
3 E 4 NA NA 0.50 4 NA
在 base R 中你可以这样做:
df[rowSums(df[2:4]==4,T)>0 & rowSums(df[6:7]==4,T)>0,]
col1 col2 col3 col4 col5 col6 col7
1 A 4 NA NA 1.55 4 NA
3 C 4 4 NA 0.62 4 4
5 E 4 NA NA 0.50 4 NA
我有一个数据框如下:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] A 4 NA NA 1.55 4 NA
[2,] B NA NA 4 0.56 NA NA
[3,] C 4 4 NA 0.62 4 4
[4,] D NA NA NA 1.61 4 NA
[5,] E 4 NA NA 0.5 4 NA
过滤后我想得到的输出是:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[3,] C 4 4 NA 0.62 4 4
[5,] E 4 NA NA 0.5 4 NA
我希望在第 2 到 4 列中至少有一个值等于 4,在第 6 到 7 列中至少有一个值等于 4。
我正在考虑使用以下命令,但我不确定如何以正确的方式使用它来提供正确的输出。
这是命令:
new.df <- df %>%
dplyr::filter_at((vars(c(2:4)), any_vars(. == 4) & vars(c(6:7)), any_vars(. == 4))
你知道我怎样才能得到想要的 new.df 吗? 谢谢!
我不确定有什么问题,除非它对您来说太冗长并且您想要一种不命名列的方法。
df = data.frame(col1 = c("A", "B", "C", "D", "E"),
col2 = c(4, NA, 4, NA, 4),
col3 = c(NA, NA, 4, NA, NA),
col4 = c(NA, 4, NA, NA, NA),
col5 = c(1.55, 0.56, 0.62, 1.61, 0.5 ),
col6 = c(4, NA, 4, 4, 4),
col7 = c(NA, NA, 4, NA, NA))
df %>% filter((col2 == 4| col3 == 4 | col4 == 4) & (col6 == 4 | col7 == 4))
产生:
col1 col2 col3 col4 col5 col6 col7
1 A 4 NA NA 1.55 4 NA
2 C 4 4 NA 0.62 4 4
3 E 4 NA NA 0.50 4 NA
在 base R 中你可以这样做:
df[rowSums(df[2:4]==4,T)>0 & rowSums(df[6:7]==4,T)>0,]
col1 col2 col3 col4 col5 col6 col7
1 A 4 NA NA 1.55 4 NA
3 C 4 4 NA 0.62 4 4
5 E 4 NA NA 0.50 4 NA