【问题标题】:Could anyone help me with the data processing with R? [Picture Updated]谁能帮我用 R 处理数据? [图片更新]
【发布时间】:2021-01-07 13:24:35
【问题描述】:

大家早上好!我是 R 编程的新手。最近,我遇到了一些问题..我想处理所附图片等数据。一列有两种数据,excel文件/表格总共有9000+行和几列,而有两种数据的列只是其中的一列。

originaldata

ID Fruit/FruitJuice                                                        
  <dbl> <chr>                                                                          
1     1 NA/applejuice:15(ml)                                                         
2     2 banana:10(kg)/orangejuice:20(ml);tomatojuice:25(ml)                            
3     3 watermelon:10(kg)/NA                                                          
4     4 banana:5(kg);grape:6(kg)/orangejuice:30(ml);applejuice:50(ml);mangojuice:25(ml)

简单描述一下数据,有2种数据的列是水果和果汁,用“/”隔开,括号里各有单位,水果或果汁中的对象用“;”隔开。 ”。

由于实际数据框包含的列比我显示的图像多,并且我在网上做了一些搜索,但我仍然不知道如何解决它并希望得到如下的最终表,可以有人帮帮我吗?谢谢

Final data wish-to-be

      ID `Fruit/FruitJuice`           
 1     1 Fruit_NA                     
 2     1 Fruitjuice_applejuice:15(ml) 
 3     2 Fruit_banana:10(kg)      
 4     2 Fruitjuice_orangejuice:20(ml)
 5     2 Fruitjuice_tomatojuice:25(ml)
 6     3 Fruit_watermelon:10(kg)      
 7     3 Fruitjuice_NA                
 8     4 Fruit_banana:5(kg)           
 9     4 Fruit_grape:6(kg)            
10     4 Fruitjuice_orangejuice:30(ml)
11     4 Fruitjuice_applejuice:50(ml) 
12     4 Fruitjuice_mangojuice:25(ml) 

【问题讨论】:

  • 输出应该是什么样子的?
  • 请让那些试图帮助你的人更容易。不要将数据/代码添加为图像。提供可重现的示例以及预期的输出。阅读how to give a reproducible example
  • @nyk 我已经更新了,感谢您的帮助,给您带来的不便,我们深表歉意>。
  • @RonakShah 抱歉我对这个网站还不熟悉,谢谢你的建议,下次我会尝试用更恰当的方式提出我的问题!

标签: r loops data-processing


【解决方案1】:

这是tidyr 的一种方法:

library(tidyverse)
data %>% 
   separate(2,into = c("Fruit","FruitJuice"), sep = "/") %>%
   pivot_longer(-ID) %>% separate_rows(value, sep = ";") %>%
   summarise(ID = ID, `Fruit/FruitJuice` = str_c(name,"_",value))
# A tibble: 12 x 2
      ID `Fruit/FruitJuice`           
   <int> <chr>                        
 1     1 Fruit_NA                     
 2     1 FruitJuice_applejuice:15(ml) 
 3     2 Fruit_banana:10(kg)          
 4     2 FruitJuice_orangejuice:20(ml)
 5     2 FruitJuice_tomatojuice:25(ml)
 6     3 Fruit_watermelon:10(kg)      
 7     3 FruitJuice_NA                
 8     4 Fruit_banana:5(kg)           
 9     4 Fruit_grape:6(kg)            
10     4 FruitJuice_orangejuice:30(ml)
11     4 FruitJuice_applejuice:50(ml) 
12     4 FruitJuice_mangojuice:25(ml) 

【讨论】:

  • 嗨@Ian Campbell,给出的解决方案完美地解决了这个问题。我有一个关于单独()函数的问题,我不清楚。函数中的“2”代表什么,是列数吗?由于函数是:分离(数据,col,进入,sep =“[^[:alnum:]] +”,remove = TRUE,convert = FALSE,extra =“warn”,fill =“warn”,... )
  • 但这只是我数据中列的一部分,它实际上由 24 列组成,在我修改编码后,控制台显示:- 错误:必须使用单个有效下标提取列。 x 下标var 的大小为 8031,但大小必须为 1。我还需要修改其他输入编码吗?
  • 我担心这会令人困惑。当您定义col = 时,您可以在 Tidyverse 中以多种方式进行。在这里,我为第二列选择了列的整数索引2。您也可以使用它的名称`Fruit/FruitJuice`。或者您可以使用tidyselect functions 之一。
  • 另请注意,第一个参数data = 是从%&gt;% 运算符左侧的输出中自动填充的。
  • 我试图用我的列名替换col =,它显示a tribble: number x 2,即使我总共有24列,我不确定发生了什么。 summarise function 也应该修改吗?我尝试创建另一个只有 2 列的数据集,它实际上运行良好,它还显示 a tribble of number x 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2011-07-25
相关资源
最近更新 更多