如果完整行包含带有dt的零,则删除某些行

时间:2018-05-11 14:56:14

标签: datatable

我问自己以下问题。

是否有一种智能方法可以使用数据包data.table解决问题,而不是使用data.frames解决问题。我有一个庞大的数据集,并希望尽可能高效地解决这个问题

Random <- sample(c("A","B","C","D","E","F","G"), size = 100, replace = 
TRUE)
Year <- sample(c(2000,2001,2002,2003,2004,2005), 100, TRUE)
Value <- sample(c(1,2,3,4), 100, TRUE)

data <- data.frame(Random,Year,Value)

# open dplyr library
library(dplyr)

#Group data by Random and year and count Values that are not NA 
data %>% group_by(Random, Year) %>% summarise(count =    
length(Value[!is.na(Value)]))

我仍然希望删除所有不会更改的行。所以准确地说,所有具有相同min和max的行:)

在@Hannie的评论后编辑。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,如果您的方差不等于0,它也会是相同的。您可以使用apply和var在一起,然后在数据帧上建立索引。

我将数据框命名为x

x[apply(x, 1, var)!=0,]

1表示您正在计算行的方差。输出:

  2000 2001 2002 2003 2004
b    1    2    3    4    5
d    6    7    8    9    5
f    1    2    3    4    5

我无法让你的代码工作,所以我创建了一个像这样的data.frame:

dput(x)
structure(list(`2000` = c(0, 1, 2, 6, 1, 1), `2001` = c(0, 2, 
2, 7, 1, 2), `2002` = c(0, 3, 2, 8, 1, 3), `2003` = c(0, 4, 2, 
9, 1, 4), `2004` = c(0, 5, 2, 5, 1, 5)), class = "data.frame", row.names = c("a", 
"b", "c", "d", "e", "f"))

具有此输出:

  2000 2001 2002 2003 2004
a    0    0    0    0    0
b    1    2    3    4    5
c    2    2    2    2    2
d    6    7    8    9    5
e    1    1    1    1    1
f    1    2    3    4    5