r - 在R中按天重命名数据框的列
问题描述
我需要在分析中按天重命名数据框。
names(dados) <- c("name", "day_1","Freq_1","Percent_1","day_2","Freq_2","Percent_2",
"day_3","Freq_3","Percent_3","day_4","Freq_4","Percent_4",
"day_5","Freq_5","Percent_5","day_6","Freq_6","Percent_6",
"day_7","Freq_7","Percent_7","day_8","Freq_8","Percent_8",
"day_9","Freq_9","Percent_9")
我正在分析我得到的数据位于数据框列表中,其中每个数据框代表一天的分析。我合并了数据框,我将每个数据框的“name”列和“day_X”、“Freq_X”和“Percent_X”列作为返回。
作为回报,我需要列具有以下名称:
"姓名","day_1","Freq_1","Percent_1","day_2","Freq_2","Percent_2","day_3","Freq_3","Percent_3"
如何分析 50 天?
可重现的例子:
day1 <- data.frame(name = c("jose", "mary", "julia"), freq = c(1,5,3), percent = c(40,30,20))
day2 <- data.frame(name = c("abner", "jose", "mary"), freq = c(3,5,4), percent = c(20,30,20))
day3 <- data.frame(name = c("abner", "jose", "mike"), freq = c(6,2,3), percent = c(40,30,70))
day4 <- data.frame(name = c("andre", "joseph", "ana"), freq = c(1,5,8), percent = c(40,30,20))
day5 <- data.frame(name = c("abner", "poli", "joseph"), freq = c(4,3,3), percent = c(10,30,10))
dates <- list(day1,day2,day4,day5)
data <- Reduce(function(x, y) merge(x, y, by = "name", all = TRUE), dates)
解决方案
这是一种使用tidyverse
软件包套件获得所需内容的方法。我们首先将数据放入“长”格式 - 但添加一个带有日期的列:
long_form <- dates %>%
imap_dfr(function(x, y) dplyr::mutate(x, day_num = y))
现在,为了获得您所追求的宽格式,我们需要重新格式化一些东西,如下面的代码所示。day_#
正如@user在评论中提到的那样,我不确定变量中应该包含什么,所以它丢失了。如果您有一个名为 的变量day
,则代码应自动执行所写的正确操作。
wide_form <- long_form %>%
gather(key, value, -name,-day_num) %>%
dplyr::mutate(
key = paste(key, day_num, sep = "_")
) %>%
select(-day_num) %>%
spread(key, value)
推荐阅读
- android - Unity 中的 Android 插件
- python - 从 1 个列表中选择 a 和 b 列表,但 a 和 b 值不一样
- laravel - 如何访问 Backpack for Laravel 中的子菜单项?
- javascript - 如何使用 Reactjs 中的变量使用 css 渐变?
- c# - 如何对现有数据库使用 ABP 框架
- django - 当我在 django 模板中格式化时间时,为什么我的时间倒计时返回 NaN
- delphi - 延迟检测用 TThread.ForceQueue() 调用的已释放对象
- python - 如何为从 pyautogui 截屏的图像添加动态名称
- c++ - 继承带有约束的模板(不是 C+20 意义上的)
- python-3.x - 如何将dict的每个键和值作为参数传递给python中的其他函数