【问题标题】:R: Mapping the indicator column to what constitutes the columnR:将指标列映射到构成列的内容
【发布时间】:2019-08-11 18:01:43
【问题描述】:

我在 R 中编码,我有一个区域的数据框,例如:

data <- data.frame(Region = c("Cali", "NYC", "LA", "Vegas"), 
                   Group = c(1,2,2,1), stringsAsFactors = F)

已将这些地区合并为一个小组。组列告诉哪些区域是组的一部分。我如何编码,当我有组信息时,我可以去查找构成该组的区域。非常感谢任何帮助。

【问题讨论】:

  • 请以可复制和可复制粘贴的格式添加示例数据,例如使用dput。截图从来都不是一个好主意,因为我们无法复制和粘贴数据/代码。
  • dput输出 进入问题正文,因此我们可以看到您的数据样本,而不仅仅是标题中的那个短语。我将其从标题中删除,但see here 提出了一个人们容易回答的 R 问题

标签: r dictionary mapping


【解决方案1】:

所以用一个小的、可重复的例子,

data <- data.frame(Region = c("Cali", "NYC", "LA", "Vegas"), Group = c(1,2,2,1),stringsAsFactors=F)

我们看到以下结果,假设我们想要所有来自第 1 组的人

group.number = 1
data[data$Group == group.number,"Region"]
[1] Cali  Vegas

或者使用 dpyr

library(dplyr)
group.number = 1
data %>%
  filter(Group == group.number)%>%
.$Region

或来自 Jilber Urbina(更具可读性)

subset(data, Group==1)$Region

【讨论】:

  • 我有一个更大的数据集,你有什么建议吗?
  • 所以您需要更快的解决方案?还是使用不同的列等?尝试将 dput(head(your.data)) 添加到问题中。
  • 你也可以使用subset(data, Group==1)
  • 我不需要对数据进行子集化,我需要创建一个向量来构成这些信息。提取信息仅此而已。赫克托的代码有效,只需要让它更有活力
  • @BruceWayne 你能定义一下你所说的动态是什么意思吗?
【解决方案2】:

最重要的是,对于以后的帖子,请

  1. 使用例如可复制和可复制和粘贴的格式包含样本数据dput
  2. 不要添加诸如“这个非常紧急!”之类的多余陈述

关于你的问题,首先我会生成一些示例数据

set.seed(2018)
df <- data.frame(
    Region = sample(letters, 10),
    Group = sample(1:3, 10, replace = T))

我建议通过Group 汇总/聚合数据,这样可以轻松提取特定Groups 的信息。

例如,在基础 R 中,您可以基于 Group 聚合数据,并根据 Group 连接所有 Regions

aggregate(Region ~ Group, data = df, FUN = toString)
#  Group        Region
#1     1             m
#2     2    i, l, g, c
#3     3 b, e, k, r, j

或者,您可以将每个Group 的所有Regions 存储在list

aggregate(Region ~ Group, data = df, FUN = list)
#  Group        Region
#1     1             m
#2     2    i, l, g, c
#3     3 b, e, k, r, j

请注意,虽然输出看起来相同,但toString 创建了一个character 字符串,而listRegions 存储在list 中。后者可能是下游处理的更好格式。


使用dplyr可以实现类似的输出

library(dplyr)
df %>%
    group_by(Group) %>%
    summarise(Region = toString(Region))

【讨论】:

  • 有没有办法删除重复项并使用 dplyr 代码获取唯一值?因为数据会有很多重复。另外,有什么方法可以使用 dplyr 将输出存储为列表?
  • @BruceWayne 您可以使用unique 来避免重复:例如... summarise(Region = toString(unique(Region)));基本 R 解决方案 aggregate(Region ~ Group, data = df, FUN = list) 已经包含 listRegion。更重要的是,您需要编辑您的帖子以包含可复制和可复制粘贴格式的数据!您已多次被要求提供此功能。
  • 我确实添加了一些数据。未来会增加更多
猜你喜欢
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多