如果R数据帧中的值匹配,请检查多列
您好,我已经知道匹配条件后的行和列,如下所示: 我的数据集:如果R数据帧中的值匹配,请检查多列,r,R,您好,我已经知道匹配条件后的行和列,如下所示: 我的数据集: Power | Channel | Speed | Speed2 | Speed3 50 | 1 | 400 | 200 | 100 50 | 6 | 400 | 500 | 80 50 | 6 | 400 | 500 | 800 我想创建一个新列,它与我的条件相匹配,如果所有列速度>=100,则返回这些行。例如: Power | Channel
Power | Channel | Speed | Speed2 | Speed3
50 | 1 | 400 | 200 | 100
50 | 6 | 400 | 500 | 80
50 | 6 | 400 | 500 | 800
我想创建一个新列,它与我的条件相匹配,如果所有列速度>=100,则返回这些行。例如:
Power | Channel | Speed | Speed2 | Speed3 | Flag
50 | 1 | 400 | 200 | 100 | 1
50 | 6 | 400 | 500 | 80 | 1
我已经知道使用以下代码返回的行和列:
which(blk13fullpower <= 100, arr.ind = TRUE)
然而,我不知道如何根据我的结果标记我的数据帧。
有人能帮我吗?试试其他人
blk13fullpower$flag <- ifelse ( blk13fullpower$Speed >100 & blk13fullpower$Speed2 > 100 & blk13fullpower$Speed3 >100 , 1 , 0)
blk13fullpower$flag 100&blk13fullpower$Speed2>100&blk13fullpower$Speed3>100,1,0)
如果您使用dput命令提供一些数据,那么就更容易了。有多种方法可以做到这一点
cols <- grep("^Speed", names(df))
df[rowSums(df[cols] <= 100, na.rm = TRUE) > 0, ]
或使用dplyr
library(dplyr)
df %>% filter_at(vars(starts_with("Speed")), any_vars(. <= 100))
df %>%
filter_at(vars(starts_with("Speed")), any_vars(. <= 100)) %>%
mutate(flag = 1)
或者使用dplyr
library(dplyr)
df %>% filter_at(vars(starts_with("Speed")), any_vars(. <= 100))
df %>%
filter_at(vars(starts_with("Speed")), any_vars(. <= 100)) %>%
mutate(flag = 1)
df%>%
过滤器在(变量(以(“速度”)开始),任何变量(.%
变异(标志=1)
Trydf[rowSums(df[grep(“速度”),名称(df))]@nicola it返回我所有的NA值谢谢你的回复,但这只适用于少数列。如果我有300列要检查怎么办?嗨,谢谢你的回复,但是我在数据框中的所有原始值都变为NA,并且它会标记所有内容。会出什么问题?@Team9数据中可能有NA
值。do你想处理它们吗?如果你有5个Speed
列,对于一个特定的行,你有2个NA
值,其余的都在100以上,你想选择那一行还是忽略它?我想把那些NA当作零。但是如果其中一个列低于100,我想选择整个t行列或100以上的所有列?在共享示例中,为什么没有选择第三行?很抱歉,我之前输入了一个错误。我指的是100以下的列。这意味着我要检查100以下的所有列,创建一个名为“flag”的新列,并在需要时标记它们
df %>%
filter_at(vars(starts_with("Speed")), any_vars(. <= 100)) %>%
mutate(flag = 1)