r - 如何根据特定行的比较来消除变量

我的数据包含 12 行和 500 多个变量 我只想保留第 9 行值 > 5* 第 10 行值的变量

数据示例:

       Name   ClassType    Col1   Col2   Col3     
       ---------------------------------------
        A      Class1       10     50    12        
        B      Class2        7     20    12
        C      Class1        8     12     8
        D      Class1        9     14    17
        E      Class2        3     15    14
        F      Class2       10     15    16
        G      Class2       12     22    15
        H      Class1       10     28    10
        I       NA          50     10    30
        J       NA           8      5     2

我想要的结果:删除第 2 列,因为该列中第 9 行的值

      Name   ClassType    Col1   Col3     
      -------------------------------
        A      Class1       10    12        
        B      Class2        7    12
        C      Class1        8     8
        D      Class1        9    17
        E      Class2        3    14
        F      Class2       10    16
        G      Class2       12    15
        H      Class1       10    10
        I       NA          50    30
        J       NA           8     2

我试过 if 条件,但没有给我很好的结果,但我想知道是否还有其他方法。

我试过的代码

data_4 <- as.data.frame(data_3[,1, drop=FALSE])


for (i in 2:640) {
  a = as.numeric(data_3[9,i])
  b = as.numeric(data_3[10,i])
  print(b)
  c = as.numeric(b*5)
  
  if(a > c) {
    data_4 <- cbind(data_4[, , drop=FALSE], data_3[ ,i,drop=FALSE])
    
    
  }

谢谢

最佳答案

我们可以使用 select 来选择条件匹配的 character 列和 numeric 列 - 该列的第 9 个元素大于last 值的 5 倍

library(dplyr)
df1 <- df1 %>% 
  dplyr::select(where(is.character),
       where(~ is.numeric(.x) && nth(., 9) >  5 * last(.) ))

-输出

df1
    Name ClassType Col1 Col3
1     A    Class1   10   12
2     B    Class2    7   12
3     C    Class1    8    8
4     D    Class1    9   17
5     E    Class2    3   14
6     F    Class2   10   16
7     G    Class2   12   15
8     H    Class1   10   10
9     I      <NA>   50   30
10    J      <NA>    8    2

数据

df1 <- structure(list(Name = c("A", "B", "C", "D", "E", "F", "G", "H", 
"I", "J"), ClassType = c("Class1", "Class2", "Class1", "Class1", 
"Class2", "Class2", "Class2", "Class1", NA, NA), Col1 = c(10L, 
7L, 8L, 9L, 3L, 10L, 12L, 10L, 50L, 8L), Col2 = c(50L, 20L, 12L, 
14L, 15L, 15L, 22L, 28L, 10L, 5L), Col3 = c(12L, 12L, 8L, 17L, 
14L, 16L, 15L, 10L, 30L, 2L)), class = "data.frame", row.names = c(NA, 
-10L))

https://stackoverflow.com/questions/70645802/

相关文章:

javascript - 如何将模型查看器加载器的颜色设置为红色

java - 为什么 Minecraft Forge 有这些奇怪的变量名?

html - 使用圆形元素的饼图

reactjs - 导航差异(React Router v6)

node.js - MongoDB Mongoose 错误: Cannot call `collec

r - 如何在 Shinydashboard R 的仪表板标题中心放置图像?

csv - 如何使用 bash 中的 awk 删除具有相似数据的行以仅保留特定列(tsv 文件)中的

c++ - 如何保证使用编译时常量初始化堆栈变量

python - 跟踪其所有事件实例化数据的类?

c++ - 如何检查两个数组或列表是否相同?