gpt4 book ai didi

r - 将不相关/相似的观察结果合并为一个(其他)

转载 作者:行者123 更新时间:2023-12-01 08:13:48 24 4
gpt4 key购买 nike

在对每个社区的感知问题进行调查后,我得到 this dataframe .由于调查有不同的选项可供选择 + 一个开放式选项,因此开放式问题的结果通常是无关紧要的(见下文):

library(dplyr)
library(splitstackshape)
df = read.csv("http://pastebin.com/raw.php?i=tQKHWMvL")

# Splitting multiple answers into different rows.
df = cSplit(df, "Problems", ",", direction = "long")

df = df %>%
group_by(Problems) %>%
summarise(Total = n()) %>%
mutate(freq = Total/sum(Total)*100) %>%
arrange(rank = desc(rank(freq)))

产生这个数据框:

> df
Source: local data table [34 x 3]

Problems Total freq
1 Hurtos o robos sin violencia 245 25.6008359
2 Drogas 232 24.2424242
3 Peleas callejeras 162 16.9278997
4 Ningún problema 149 15.5694880
5 Agresiones 66 6.8965517
6 Robos con violencia 62 6.4785789
7 Quema contenedores 6 0.6269592
8 Ruidos 5 0.5224660
9 NS/NC 4 0.4179728
10 Desempleo 2 0.2089864
.. ... ... ...
>

如您所见,第 9 行之后的结果大多无关紧要(每个选项只有一个或两个受访者),所以我希望将它们分组为一个选项(例如“其他”)而不会丢失他们的答案与社区的关系(这就是我现在不能重命名这些值的原因)。有什么建议吗?

最佳答案

splitstackshape 导入 data.table 包(因此您甚至不需要 library 它)并分配一个 data.table 类到你的数据集,所以我会简单地从那里继续 data.table 语法,特别是因为当它出现时没有什么比 data.table分配给一个子集。

换句话说,不用这么长的 dplyr 管道,你可以简单地做

df[, freq := .N / nrow(df) * 100 , by = Problems]
df[freq < 6, Problems := "OTHER"]

你很高兴。

您可以使用

检查新的汇总表
df[, .(freq = .N/nrow(df) * 100), by = Problems][order(-freq)]
# 1: Hurtos o robos sin violencia 25.600836
# 2: Drogas 24.242424
# 3: Peleas callejeras 16.927900
# 4: Ningֳ÷n problema 15.569488
# 5: Agresiones 6.896552
# 6: Robos con violencia 6.478579
# 7: OTHER 4.284222

关于r - 将不相关/相似的观察结果合并为一个(其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com