-2

我有一些这样的数据,我已经加载到 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
4

1 回答 1

0

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

@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 的说明

现在我们已经处理好了。对于您的下一个问题,请制作一个最小的可重现示例。请参阅如何制作出色的 R 可重现示例。如果您这样做,您将更快地获得更多帮助!

于 2020-05-19T22:58:47.400 回答