datatable - 如果完整行包含 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 的评论之后编辑。
解决方案
如果我理解正确,如果您的方差不等于 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
推荐阅读
- jupyter-notebook - Jupyter Notebook 中的单元格不会保留数据
- python - 如何将 random.randrange 从可能(10,20)增加到(12,24)
- html - 如何在更新表单的下拉列表中设置所选值
- r - 如何使用 `blavaan` 处理丢失的数据?
- windows - Docker Alpine 镜像,找不到本地网络,连接到 VPN
- qt - 如何将 QT MCU 项目调试到 QTcreator 和 IMXRT1052 评估板?
- c++ - 错误:__WXMSW__||没有这样的文件或目录| 在 Code::Blocks WxWidgets C++ 中构建项目时
- python - 检测链接是否无效的问题
- python - 与 bs4 和 html 混淆
- python - 在单个会话中在 selenium 中运行多个测试