R 获取另一列的不同类别中某列不为NA的行数
我有一个data.tableR 获取另一列的不同类别中某列不为NA的行数,r,data.table,R,Data.table,我有一个data.tableqq。以下是dput structure(list(Sepal.Length = c(NA, NA, 4.7, NA, 5), Sepal.Width = c(3.5, NA, 3.2, 3.1, 3.6), Petal.Length = c(1.4, 1.4, 1.3, 1.5, 1.4), Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2), Species = c("a", "a", "b", "b",
qq
。以下是dput
structure(list(Sepal.Length = c(NA, NA, 4.7, NA, 5), Sepal.Width = c(3.5,
NA, 3.2, 3.1, 3.6), Petal.Length = c(1.4, 1.4, 1.3, 1.5, 1.4),
Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2), Species = c("a",
"a", "b", "b", "b")), .Names = c("Sepal.Length", "Sepal.Width",
"Petal.Length", "Petal.Width", "Species"), row.names = c(NA,
-5L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000011c90788>)
> qq
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: NA 3.5 1.4 0.2 a
2: NA NA 1.4 0.2 a
3: 4.7 3.2 1.3 0.2 b
4: NA 3.1 1.5 0.2 b
5: 5.0 3.6 1.4 0.2 b
我做了以下几件事
qq[, no_rows:= nrow(qq[is.na(Sepal.Length) == F, ]), .(Species)]
但它不起作用。有人能给我一个有效的数据表解决方案吗?我们按“种类”分组,得到逻辑索引(
!is.na(Sepal.Length)
)的和,并分配(:=
)输出以创建“无行”
qq[, no_rows := sum(!is.na(Sepal.Length)) , by = Species]
qq
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species no_rows
#1: NA 3.5 1.4 0.2 a 0
#2: NA NA 1.4 0.2 a 0
#3: 4.7 3.2 1.3 0.2 b 2
#4: NA 3.1 1.5 0.2 b 2
#5: 5.0 3.6 1.4 0.2 b 2
如果我必须按两列进行分组怎么办?说物种
和花瓣宽度
?@user3664020,通过。
qq[, no_rows := sum(!is.na(Sepal.Length)) , by = Species]
qq
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species no_rows
#1: NA 3.5 1.4 0.2 a 0
#2: NA NA 1.4 0.2 a 0
#3: 4.7 3.2 1.3 0.2 b 2
#4: NA 3.1 1.5 0.2 b 2
#5: 5.0 3.6 1.4 0.2 b 2