如果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)

Try
df[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)