嗨,在符合条件之后,我已经知道行和列,如下所示: 我的数据集:
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)
其输出为:
row col
[1,] 1 1
[2,] 2 1
[3,] 3 1
[4,] 4 1
[5,] 5 1
[6,] 6 1
[7,] 7 1
但是,我不知道如何根据结果标记我的数据框。 有人可以帮我吗?
答案 0 :(得分:1)
尝试ifelse
blk13fullpower$flag <- ifelse ( blk13fullpower$Speed >100 & blk13fullpower$Speed2 > 100 & blk13fullpower$Speed3 >100 , 1 , 0)
使用dput命令提供一些数据会更容易。
答案 1 :(得分:1)
有多种方法可以做到这一点
cols <- grep("^Speed", names(df))
df[rowSums(df[cols] <= 100, na.rm = TRUE) > 0, ]
与apply
df[apply(df[cols] <= 100, 1, any), ]
或与dplyr
library(dplyr)
df %>% filter_at(vars(starts_with("Speed")), any_vars(. <= 100))
如果要使用带有基础R解决方案的flag = 1
添加新列,可以使用transform
transform(df[rowSums(df[cols] <= 100, na.rm = TRUE) > 0, ], flag = 1)
或mutate
与dplyr
df %>%
filter_at(vars(starts_with("Speed")), any_vars(. <= 100)) %>%
mutate(flag = 1)