如何在R语言多列中统计特定字符(如stateA)的出现次数
统计特定字符出现次数的简洁实现方法
需求:仅统计特定值(如'stateA')在数据框各列的出现次数,不使用table()函数,结果可存储为新数据框或追加至原数据框最后一行。
示例数据:
df <- data.frame( var1 = c(paste0('state', sample(LETTERS[1:20], 1000, replace = T))), var2 = c(paste0('state', sample(LETTERS[1:20], 1000, replace = T))), var3 = c(paste0('state', sample(LETTERS[1:20], 1000, replace = T))), var4 = c(paste0('state', sample(LETTERS[1:20], 1000, replace = T))), var5 = c(paste0('state', sample(LETTERS[1:20], 1000, replace = T))) )
方法1:生成新数据框
利用colSums()直接对每列的布尔匹配结果求和,效率远高于遍历所有值的table():
# 计算每列中stateA的出现次数 stateA_counts <- colSums(df == 'stateA') # 转换为行式数据框 result_df <- as.data.frame(t(stateA_counts)) # 可选:为统计行命名 rownames(result_df) <- 'stateA_出现次数'
运行后result_df就是仅包含目标值统计结果的新数据框。
方法2:追加至原数据框末尾
将统计结果转成与原列类型匹配的格式后,用rbind()追加:
# 计算各列stateA的次数 counts <- colSums(df == 'stateA') # 转换为字符型(匹配原数据框列类型) counts_char <- as.character(counts) # 追加到原数据框最后一行 df <- rbind(df, counts_char) # 可选:为新增行命名 rownames(df)[nrow(df)] <- 'stateA_出现次数'
说明
colSums(df == 'stateA')是核心逻辑:df == 'stateA'生成一个布尔矩阵,每个元素表示对应位置是否等于目标值,colSums()直接对每列求和得到该列目标值的出现次数,完全无需统计其他无关值,符合需求且高效。
内容的提问来源于stack exchange,提问作者匿名
相关产品推荐
相关产品推荐

