首页 > 解决方案 > 如果完整行包含 dt 为零,则删除某些行

问题描述

我在问自己以下问题。

有没有一种聪明的方法可以使用包 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)]))

我仍然希望删除所有不变的行。所以准确地说,所有具有相同最小值和最大值的行:)

在@Hannie 的评论之后编辑。

标签: datatable

解决方案


如果我理解正确,如果您的方差不等于 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

推荐阅读