在R语言中如何提取单列数据中Orange对应的数值?
问题描述
我有一个名为test的数据集,其结构如下:
dput(test) structure(list(Data = c("Apple", "3", "Orange", "4", "Grape", "2", "Orange", "5", "Grape", "1", "Orange", "4")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -12L))
该数据集仅有一列Data,包含水果名称和对应数字。我希望提取所有Orange对应的数字,并整理为如下格式的输出:
Data Orange1 4 Orange2 5 Orange3 4
解决方案
可以使用R语言结合dplyr和tidyr包来实现需求,步骤如下:
首先加载所需包:
library(dplyr) library(tidyr)
- 重构数据集,将水果名和对应数字拆分为单独的列:
processed <- test %>% # 每2行分为一组(水果行+数字行) mutate(group = ceiling(row_number() / 2)) %>% # 转换为宽表,拆分出水果名与数值列 pivot_wider(names_from = (row_number() %% 2 == 1), values_from = Data, names = c("num", "fruit")) %>% # 调整列顺序,确保水果名列在前 select(fruit, num)
- 筛选
Orange相关记录并添加序号后缀:
orange_data <- processed %>% filter(fruit == "Orange") %>% mutate(fruit_label = paste0(fruit, row_number()))
- 转换为目标格式并输出:
final_result <- data.frame(Data = c(rbind(orange_data$fruit_label, orange_data$num))) # 打印结果时隐藏行名 print(final_result, row.names = FALSE)
执行上述代码后,即可得到你需要的输出格式。
内容的提问来源于stack exchange,提问作者kaix
相关产品推荐
相关产品推荐

