【问题标题】:Remove rows from a dataframe based on a value in one column根据一列中的值从数据框中删除行
【发布时间】:2014-08-09 07:02:35
【问题描述】:

我有一个数据框(从 csv 文件导入)如下

moose     loose     hoose
   2        3         8
   1        3         4
   5        4         2
   10       1         4

R 代码应该生成一个均值列,然后我想删除均值

 moose     loose     hoose     mean 
   2        3         8        4.3
   1        3         4        2.6
   5        4         2        3.6
   10       1         4         5

最终应该是:

  moose     loose     hoose    mean 
    2        3         8       4.3
    10       1         4        5

如何在 R 中做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:
     dat2 <- subset(transform(dat1, Mean=round(rowMeans(dat1),1)), Mean >=4)
     dat2
      # moose loose hoose Mean
     #1     2     3     8  4.3
     #4    10     1     4  5.0
    

    使用data.table

     setDT(dat1)[, Mean:=rowMeans(.SD)][Mean>=4]
     #  moose loose hoose     Mean
     #1:     2     3     8 4.333333
     #2:    10     1     4 5.000000
    

    【讨论】:

      【解决方案2】:

      我假设您的数据名为d。然后你运行:

      d$mean <- rowMeans(d)  ## create a new column with the mean of each row
      d <- d[d$mean >= 4, ]  ## filter the data using this column in the condition
      

      我建议您阅读有关在 data.frame 中创建变量和过滤数据的内容。这些是非常常见的操作,您可以在许多情况下使用。

      【讨论】:

        【解决方案3】:

        您还可以使用within,它允许您分配/删除列,然后返回转换后的数据。以df开头,

        > df
        #  moose loose hoose
        #1     2     3     8
        #2     1     3     4
        #3     5     4     2
        #4    10     1     4
        
        > within(d <- df[rowMeans(df) > 4, ], { means <- round(rowMeans(d), 1) })
        #  moose loose hoose means
        #1     2     3     8   4.3
        #4    10     1     4   5.0
        

        【讨论】:

        • 因为我想要三个特定列的平均值,所以我使用了以下内容:df$Means 100,], { 表示
        • within(d &lt;- df[rowMeans(df)&gt;100, 15:17], { mean &lt;- rowMeans(d) })
        • 谢谢理查德,虽然我仍然在 rowMeans(df) 中遇到错误:'x' must be numeric
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 2020-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多