R:一列中不包括空格的条目数
R: count of the number of entries in a column excluding the blanks
我的数据是这样的:
CHROM Mutant_SNP_2
3RD T
4RD C
5RD
6RD G
7RD A
8RD
我有一个 CSV 数据框。我想从列 "Mutant_SNP_2" 中计算有多少行有一个条目,因此不需要计算任何空白“”。我将它按列 "CHROM" 分开。我在 dplyr
中使用此代码在布局方面获得了正确的输出:
count(combined, Mutant_SNP_2, wt = CHROM, sort = FALSE)
但是它只计算空行而不是有值的行。非常感谢任何想法。
我得到的输出:
Mutant_SNP_2 CHROM.x n
(fctr) (fctr) (int)
1 gi|339957448|gb|AENI01001139.1| 23
2 gi|339957449|gb|AENI01001138.1| 9
3 gi|339957451|gb|AENI01001136.1| 97
4 gi|339957452|gb|AENI01001135.1| 116
5 gi|339957453|gb|AENI01001134.1| 175
6 gi|339957454|gb|AENI01001133.1| 2
7 gi|339957455|gb|AENI01001132.1| 78
8 gi|339957456|gb|AENI01001131.1| 51
9 gi|339957457|gb|AENI01001130.1| 2
10 gi|339957458|gb|AENI01001129.1| 52
.. ... ... ...
我们可以尝试对按 CHROM
分组的布尔向量 df$Mutant_SNP_2 != ""
求和。这是有效的,因为 TRUE
将被强制转换为 1
,而 FALSE
将被转换为 0
。
library(dplyr)
df %>% group_by(CHROM) %>%
summarise(n = sum(Mutant_SNP_2 != ""))
CHROM n
(fctr) (int)
1 3RD 1
2 4RD 1
3 5RD 0
4 6RD 1
5 7RD 1
6 8RD 0
试试这个:
library(data.table)
setDT(df)[ Mutant_SNP_2 != "", .(count = .N), by=CHROM]
也许是这个?
setDT(df)[ ,.(count= length(unique(Mutant_SNP_2))), by=CHROM]
我们可以 ave
从 base R
做到这一点
with(df1, as.numeric(ave(Mutant_SNP_2, CHROM,
FUN= function(x) sum(nzchar(x)))))
#[1] 1 1 0 1 1 0
您可以尝试使用函数 table
,带有 TRUE
的行将为您提供非空白值的数量,按 CHROM
值):
table(df$Mutant_SNP_2!="", df$CHROM)
可以直接用table(df$Mutant_SNP_2!="", df$CHROM)[2, ]
得到结果
示例:
set.seed(123)
df <- data.frame(CHROM=sample(letters[1:3], 10, replace=TRUE), Mutant_SNP_2=sample(c("", "not blank"), 10, replace=TRUE), stringsAsFactors=FALSE)
table(df$Mutant_SNP_2!="", df$CHROM)
# a b c
# FALSE 0 2 3
# TRUE 2 2 1
table(df$Mutant_SNP_2!="", df$CHROM)[2, ]
# a b c
# 2 2 1
我的数据是这样的:
CHROM Mutant_SNP_2
3RD T
4RD C
5RD
6RD G
7RD A
8RD
我有一个 CSV 数据框。我想从列 "Mutant_SNP_2" 中计算有多少行有一个条目,因此不需要计算任何空白“”。我将它按列 "CHROM" 分开。我在 dplyr
中使用此代码在布局方面获得了正确的输出:
count(combined, Mutant_SNP_2, wt = CHROM, sort = FALSE)
但是它只计算空行而不是有值的行。非常感谢任何想法。
我得到的输出:
Mutant_SNP_2 CHROM.x n
(fctr) (fctr) (int)
1 gi|339957448|gb|AENI01001139.1| 23
2 gi|339957449|gb|AENI01001138.1| 9
3 gi|339957451|gb|AENI01001136.1| 97
4 gi|339957452|gb|AENI01001135.1| 116
5 gi|339957453|gb|AENI01001134.1| 175
6 gi|339957454|gb|AENI01001133.1| 2
7 gi|339957455|gb|AENI01001132.1| 78
8 gi|339957456|gb|AENI01001131.1| 51
9 gi|339957457|gb|AENI01001130.1| 2
10 gi|339957458|gb|AENI01001129.1| 52
.. ... ... ...
我们可以尝试对按 CHROM
分组的布尔向量 df$Mutant_SNP_2 != ""
求和。这是有效的,因为 TRUE
将被强制转换为 1
,而 FALSE
将被转换为 0
。
library(dplyr)
df %>% group_by(CHROM) %>%
summarise(n = sum(Mutant_SNP_2 != ""))
CHROM n
(fctr) (int)
1 3RD 1
2 4RD 1
3 5RD 0
4 6RD 1
5 7RD 1
6 8RD 0
试试这个:
library(data.table)
setDT(df)[ Mutant_SNP_2 != "", .(count = .N), by=CHROM]
也许是这个?
setDT(df)[ ,.(count= length(unique(Mutant_SNP_2))), by=CHROM]
我们可以 ave
从 base R
做到这一点
with(df1, as.numeric(ave(Mutant_SNP_2, CHROM,
FUN= function(x) sum(nzchar(x)))))
#[1] 1 1 0 1 1 0
您可以尝试使用函数 table
,带有 TRUE
的行将为您提供非空白值的数量,按 CHROM
值):
table(df$Mutant_SNP_2!="", df$CHROM)
可以直接用table(df$Mutant_SNP_2!="", df$CHROM)[2, ]
示例:
set.seed(123)
df <- data.frame(CHROM=sample(letters[1:3], 10, replace=TRUE), Mutant_SNP_2=sample(c("", "not blank"), 10, replace=TRUE), stringsAsFactors=FALSE)
table(df$Mutant_SNP_2!="", df$CHROM)
# a b c
# FALSE 0 2 3
# TRUE 2 2 1
table(df$Mutant_SNP_2!="", df$CHROM)[2, ]
# a b c
# 2 2 1