根据一列中的值从数据框中删除行

时间:2014-08-09 07:02:36

标签: r

我有一个数据帧(从csv文件导入),如下所示

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

R代码应生成一个平均列,然后我想删除平均值<4的所有行,以便我最终得到:

 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?

中这样做

3 个答案:

答案 0 :(得分:2)

 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

答案 1 :(得分:1)

我假设您的数据名为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中创建变量和过滤数据的内容。这些是非常常见的操作,您可以在许多环境中使用它们。

答案 2 :(得分:0)

您还可以使用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