【问题标题】:how to strcount each element dataframe in r如何计算r中的每个元素数据帧
【发布时间】:2017-04-12 03:13:08
【问题描述】:

我在打印和逐一计算数组/数据帧字符串外观时遇到了一点问题

我有一个名为 Pos_1 的数据框,它包含如下字符串:

Pos_1 = (morning bliss great happy)

和另一个名为 Pos_2 的数据框,它包含如下字符串:

Pos_2 = (morning great)

我想要做的是,计算从Pos_2中的Pos_1数据帧出现的字符串

我正在使用str_count 来计算出现的每个字符串

for(h in 1:5)
Score=sum(str_count(Pos_2, Pos_1[h]))[1:length(Pos_1)]

从上面的代码中它只返回来自Pos_1的所有字符串元素的总数

  Text  Score 
morning  0
bliss    0 
great    0
happy    0

计算从数据帧Pos_1 和数据帧Pos_2strcount 匹配的元素的预期结果(见下文),

我需要生成下面的分数行

Text     Score
morning   1
bliss     0 
great     1 
happy     0

有什么解决办法吗?

【问题讨论】:

  • 能否添加示例数据
  • @Mr.A,你好,示例数据写在上面,我想从数据帧Pos_1和数据帧Pos_2处理
  • 我还是一头雾水。您是要计算Pos_2 的每个元素在Pos_1 中出现的次数,还是要对Pos_1 的每个元素确定它是否出现在Pos_2 中?
  • @ulfelder ,我想计算 Pos_1 的每个元素在 Pos_2 伴侣中出现的次数,例如,Pos_1 中的早晨,Pos_2 中的早晨,所以它返回 2,但我想要的是,如何计算每个元素?
  • @hope9,对不起,我还是很困惑。在您的最新评论中,您首先说“计算 Pos_1 的每个元素在 Pos_2 中出现的次数”,但随后您在该评论中的示例做了一些不同的事情。

标签: r string for-loop dataframe


【解决方案1】:

我认为这是你想要的:

library(stringr)

Score <- sapply(seq_along(unlist(Pos_1)), function(i)
  sum(str_count(unlist(Pos_2), unlist(Pos_1)[i])))

您使用unlist 将字符串数据帧转换为向量。然后使用sapply 对未列出的Pos_1 的元素迭代str_count,得到一个向量作为回报。

如果Pos_1 的每个元素在Pos_2 中出现的次数不超过一次,则不需要str_count,只需使用:

Score <- +(unlist(Pos_1) %in% unlist(Pos_2))

【讨论】:

  • @ulferder thx a lottt , :),它成功了,太棒了,我刚刚学习了这个 R 编程,我明白了逻辑,但缺乏如何编写和实现它
  • 很高兴它成功了。如果是这样,如果你能正式接受答案会很好。
【解决方案2】:

试试这个

library(stringr)

Pos_1 <- c("morning", "bliss", "great","happy")
Pos_2 <- c("morning", "great")

df<-data.frame(Text=Pos_1,Score=unlist(lapply(Pos_1,function(x) sum(str_count(x,Pos_2)))))

df

输出

     Text Score
1 morning     1
2   bliss     0
3   great     1
4   happy     0

【讨论】:

  • 从上面的代码,我得到一个错误,方法不适用
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2019-08-28
相关资源
最近更新 更多