r - 通过分组将列转换为子字段
问题描述
我想将以下数据从
day fox hare wolf
1 Monday 4 20 2
2 Tuesday 4 25 1
3 Wednesday 4 30 3
至
day attribute
1 Monday fox=4,hare=20,wolf=2
2 Tuesday fox=4,hare=25,wolf=1
3 Wednesday fox=4,hare=30,wolf=3
我尝试使用 tidyr,但它似乎无处可去....
任何人,请指教。
解决方案
两种可能的方法:
1)使用tidyverse包:
library(dplyr)
library(tidyr)
df %>%
gather(k, v, 2:4) %>%
unite('attribute', k, v, sep = '=') %>%
group_by(day) %>%
summarise(attribute = paste0(attribute, collapse = ','))
2)使用data.table包:
library(data.table)
melt(setDT(df), id = 1)[, attribute := paste(variable, value, sep = '=')
][, .(attribute = paste0(attribute, collapse = ',')), by = day]
两者都给出(tidyverse
显示的输出):
# A tibble: 3 x 2 day attribute <chr> <chr> 1 Monday fox=4,hare=20,wolf=2 2 Tuesday fox=4,hare=25,wolf=1 3 Wednesday fox=4,hare=30,wolf=3
推荐阅读
- typescript - 如何重置 VSCode Typescript 版本
- r - R 将向量扩展为围绕中心值的相同长度
- java - 回调获取响应同步 kotlin
- c# - 在 C# 中的 ActiveX 控件中的文本框中添加换行符
- image - Drupal 8:如何在模板 page.html.twig 中获取用户字段图像
- javascript - 在 NativeScript 对话框上显示 FontIcon
- react-native - Crashlytics React-Native 应用程序分发不会通过初始屏幕
- html - 如果 Shopify 中没有显示标签,如何隐藏列表?
- sql - 使用“'”标记作为数据的一部分
- html - 在angular2中将字符串转换为html