如何用lapply与strsplit找出g.list中回复单词数最多的受访者
解决方案:找出回复单词数最多的受访者
问题分析
你当前代码的核心错误在于对strsplit()的返回结构处理不当:
strsplit()作用于单个字符串时,返回的是包含一个字符向量的列表,而非直接的向量- 你使用
unlist(g.split)后,拆分后的单词被拆成了独立的单个字符串元素,再用lapply(..., length)得到的是每个单个字符串的长度(自然都是1)
正确实现代码
步骤1:计算每个受访者的回复单词数
直接对g.list使用lapply(),在匿名函数中完成拆分并取向量长度:
# 计算每个受访者的回复单词数 g.count <- lapply(g.list, function(reply) { # strsplit返回列表,取[[1]]得到拆分后的单词向量,再计算长度 length(strsplit(reply, " ")[[1]]) })
步骤2:找出单词数最多的受访者
将计数结果转为数值向量后,筛选出最大值对应的ID:
# 转为数值向量,保留受访者ID作为名称 count_vec <- unlist(g.count) # 获取最大单词数 max_word_count <- max(count_vec) # 获取所有达到最大单词数的受访者ID top_respondents <- names(count_vec[count_vec == max_word_count])
验证效果
用你提供的示例g.list测试:
- 受访者
1590610566的回复拆分后有7个单词,对应的计数会是7 - 执行
max(count_vec)会得到7,top_respondents会返回"1590610566"
内容的提问来源于stack exchange,提问作者kushaan gulati
相关产品推荐
相关产品推荐

