【问题标题】:Aggregating data in R based on the contents of various columns [duplicate]根据各列的内容聚合R中的数据[重复]
【发布时间】:2020-05-19 22:35:05
【问题描述】:

我有一些类似的数据,我已经加载到 R

Data column 1, Data column 2,option1, option2, option 3.
23,            45.6         ,       ,option2, option3
5,             30.6         ,option1,option2,
2,            5             ,       ,, option3
3,            40            ,       ,option2, 

我想扩展数据,使选项列成为行条目,并且每个选项的数据列都重复,这样我就可以根据其中包含选项的列做一个数据透视表

所以,我想知道如何从R中的顶部数据表转到底部数据表

Data column 1, Data column 2,option
23,            45.6         ,option2, 
23,            45.6         ,option3
5,             30.6         ,option1
5,             30.6         ,option2
2,            5             ,option3
3,            40            ,option2

【问题讨论】:

  • 能否请您使用dput 显示示例,以便我们正确获取数据的结构。谢谢。列名选项也不清楚,可以试试df1 %>% separate_rows(optioncol, sep=",\\s*")

标签: r pivot-table data-transform


【解决方案1】:

您格式化数据的方式是个问题;我稍微修改了一下。

@library(tidyverse)
# Your data structure is something like this:
df <- tibble(DataCol1 = c(23,5,2,3),
       DataCol2 = c(45.6, 30.6, 5, 40), 
       Option1 = c(NA, TRUE, NA, NA),
       Option2 = c(TRUE, TRUE, NA, TRUE),
       Option3 = c(TRUE, NA, TRUE, NA))
columnames = c("Option1", "Option2", "Option3")

我们将使用gather 来获得您想要的输出

df %>% 
   # A row id makes it easier to put the data back in the same order it came in.
  rowid_to_column("ID") %>% 
    # Here's the tricky part.
  gather(key = "Options", val = "val", all_of(columnames) ) %>% 
    # Clean up a little.
  filter(!is.na(val)) %>% 
  arrange(ID) %>% 
  select(- ID, -val)

结果是

# A tibble: 6 x 3
  DataCol1 DataCol2 Options
     <dbl>    <dbl> <chr>  
1       23     45.6 Option2
2       23     45.6 Option3
3        5     30.6 Option1
4        5     30.6 Option2
5        2      5   Option3
6        3     40   Option2

完全现代的方法是使用pivot_longer。可悲的是,该版本尚未安装在我的系统上。您可以在 https://r4ds.had.co.nz/tidy-data.html#pivoting 阅读 Hadley Wickham 的说明

现在我们已经处理好了。对于您的下一个问题,请制作一个最小可重现示例。见How to make a great R reproducible example。如果您这样做,您会更快地获得更多帮助!

【讨论】:

  • 可行,但我想在现实生活中使用的列没有公共前缀,它们是标题
  • 我根据您的建议尝试了以下方法:df%>% pivot_longer(all_of(selectedheadings), names_to = "headings", values_to = "headiungchosen") 但我收到一个错误:错误:必须使用有效的下标向量对列进行子集化。 x 下标有错误的类型`data.frame
  • 如果我将starts_with("Opt") 替换为all_of(selectedheadings)
  • 我正在使用标题
  • 每当我尝试查看标题时,例如 view(headings),我都会收到以下错误,我无法在其他地方找到报告:view_fun 中的错误(list(标题中的数据 = 字符(0),:无效'x' 参数
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多