【问题标题】:R code for whatsapp average word length per person每人whatsapp平均字长的R代码
【发布时间】:2019-04-07 19:23:10
【问题描述】:

我是 R 新手。目前,我已经解析了来自 Whatsapp 聊天组的消息,现在我正在尝试可视化每个成员的平均字长数据。

我正在使用此代码计算每次“Eddy”消息的字数 for(i in grep("Eddy",chatcsv[,2],fixed=TRUE)){ length(which(!is.na(chatcsv[i,4:111]))) }

这不会返回任何输出或任何错误消息。

我的意图是总结总长度,然后除以个人消息的次数。最后,我打算将平均值作为向量并将其可视化为条形图。

谢谢

【问题讨论】:

标签: r chat whatsapp


【解决方案1】:

您的语法错误。你应该使用:

allnames <- chatcsv[,2] #or cimilar
eddyindexes <- grep("Eddy",allnames,fixed=TRUE) #return indexes of eddys chats
eddyschats <- chatcsv[eddyindexes, 4:100]
eddysavgcharacters <- apply[eddyschats,function(x) mean(nchar(x))] #average nchars of eddys chats

【讨论】:

  • 谢谢。所以我说的对吗,当使用 grep 时,不能使用字符向量参数的子集?
  • 如果答案是好的,请考虑接受它。 Grep 返回 True 或 False,因此您应该使用 which() 来仅获取 true 值,另一个问题是您在循环中除了调用 length 而不将其分配给任何变量之外什么都不做。您应该这样做,或者如果您只想打印该长度,请使用 print。
【解决方案2】:

我认为您来自非功能性语言。 (不是一种功能失调的语言,而是一种不是“功能性语言”的语言。)您的表达式 length(which(!is.na(chatcsv[i,4:111]))) 不会做任何事情,因为它在 for 循环内,但没有分配给任何名称。它只是消失了。您需要在循环之前使用res &lt;-numeric(0) 创建一个命名向量(比如res),然后在循环内完成:

 res[i] <-  length(which(!is.na(chatcsv[i,4:111])))

较早的回答者在他的评论中混淆了grepgreplgrep 函数返回整数值; grepl 函数返回逻辑向量。它们都可以用于索引。

这种表述是否会为您提供进一步努力的基础尚不清楚。这将取决于chatcsv[i,4:111] 的内容。如果内容是单个单词,那么它可能会成功。如果它们是句子,那么它不会。 length 函数只会返回行向量中非 NA 值的数量。只有当您之前的(未描述的)操作在该组列中创建了一组干净的“单词”时,您才会获得有意义的结果。

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多