r - 如何计算数据框中以逗号分隔的值

标签 r

我有一个数据框,最初是一项调查,人们可以在其中回答他们的狗品种和他们最喜欢的狗品种。显然,每个人可以有多个答案,这些答案将显示在同一类别中,但用逗号分隔。但是我不知道如何计算每个品种在各自类别中被提及的次数。

这是代码:

dogs_owned <-c("labrador, golden", "golden","pitbull, chihuahua")
dogs_fav <- c("beagle", "labrador, shepherd", "chihuahua, pitbull")
test <- data.frame(dogs_owned,dogs_fav)

list <- c("labrador", "golden","pitbull","chihuahua","beagle","shepherd")
list_test <- data.frame(list)
list_test$count_own <- 0
list_test$count_fav <- 0

目标是计算每种狗的名称在其各自的列表计数中在 dogs_owned 和 dogs_fav 中出现的次数

最佳答案

您可以使用strsplit分割字符串,然后使用table进行计数

> (owned <- as.data.frame(table(trimws(unlist(strsplit(test$dogs_owned, split=","))))))
       Var1 Freq
1 chihuahua    1
2    golden    2
3  labrador    1
4   pitbull    1
> (fav <- as.data.frame(table(trimws(unlist(strsplit(test$dogs_fav, split=","))))))
       Var1 Freq
1    beagle    1
2 chihuahua    1
3  labrador    1
4   pitbull    1
5  shepherd    1

如果您希望它们在一个 data.frame 中,我们可以使用 dplyr 包中的 full_join 作为 merge 的替代方案(请参阅 r2evans 的答案)

> library(dplyr)
 owned %>% 
   full_join(fav, by="Var1") %>% 
   rename(Owned = Freq.x,
          Fav = Freq.y)
       Var1 Owned Fav
1 chihuahua     1   1
2    golden     2  NA
3  labrador     1   1
4   pitbull     1   1
5    beagle    NA   1
6  shepherd    NA   1

关于r - 如何计算数据框中以逗号分隔的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74491090/

相关文章:

linux - 在没有 CRAN 的情况下安装 R 附加包

r - 在 R 中构建相对路径的函数?

r - 有没有一种优雅的方法可以在 R 中按行名重新排序数据框

r - 如何等待两个代码块在 R Shiny 中运行

r - Shiny 的rcharts图表的大小?

r - 使用 purrr::map 将新列分配给 data.tables 列表

json - 如何从具有 .json 格式的行中提取字符串?

string - 如何确定重音编码?

r - 以编程方式将文件加载到 Rstudio 中

r - 在小鼠中进行后处理,将一个变量替换为另一个变量