嗨,我有这个数据集:
> id s1 s2 s3 s4 1 "A" "A" "NA" "A" 2 "NA" "A" "NA" "A" 3 "Na" "NA" "NA" "A" 4 "A" "NA" "NA" "Na" 5 "A" "A" "NA" "A"
我想计算有多少ID在s1、s2、s3、s4中只有一个值“A”。在这种情况下,只有2个人(ID 3和4)。但如果我有一个大数据集,我如何计算呢?
qpgpyjmq1#
您可以使用
which(rowSums(!is.na(df[-1])) == 1) # [1] 3 4
将which()替换为sum(),以获取只有1个非缺失值的ID的数量。
which()
sum()
如果不幸将所有NA存储为"NA"、"Na"或"na",则使用以下代码提前将它们转换回常规NA。
NA
"NA"
"Na"
"na"
df[] <- lapply(df, \(x) { x[x %in% c('NA', 'Na', 'na')] <- NA; x })
iq3niunx2#
检查字符串中的“A”
library(tidyverse) df %>% filter(rowSums(across(s1:s4, ~ str_detect(.x, "A")), na.rm = TRUE) == 1) # A tibble: 2 × 5 id s1 s2 s3 s4 <dbl> <chr> <chr> <lgl> <chr> 1 3 Na NA NA A 2 4 A NA NA Na
2条答案
按热度按时间qpgpyjmq1#
您可以使用
将
which()
替换为sum()
,以获取只有1个非缺失值的ID的数量。更新
如果不幸将所有
NA
存储为"NA"
、"Na"
或"na"
,则使用以下代码提前将它们转换回常规NA
。iq3niunx2#
检查字符串中的“A”