我问自己以下问题。
是否有一种智能方法可以使用数据包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的评论后编辑。
答案 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